-
1.
C
和
C++
中
struct
有什么区别?
C
语言中:
Struct
是用户自定义数据类型(
UDT
)
C++
语言中:
Struct
是抽象数据类型(
ADT
),支持成员函数的定义。
在
C
++
中,
struct
的成员的默认访
问说明符为
public
,
class
为
private
。
< br>
c
中的
struct
是没有权限设置的。
C++
中
struct
增加了访问权限
,
且可以和类一样有成员函数。
C
++
中的
struct
等同于
class,
只是
class
< br>默认成员权限是
private,
而
struct
默认成员权限是
public
。
1>
< br>C++
中的
struct
类似于
class
,有变量,有构造函数、虚函数等,有
继承,多态等类的特征;
2>
2> C
中的
struct
只有变量,不能有函数,但是可以有函数指
针
2.
C++
中的
struct
和
class
有什么区别?
在
C++
中,两者区别不大,但是有<
/p>
2
个主要的区别
1>.
继承权限:
struct
默认
是
public
继承;
class
p>
默认是
private
继承
1
2>.
访问权限:
struct
默认是
< br>public
访问;
class
默认是
private
访问
3.
如何判断一段程序是由
C
编译程序还是由
C++
编译程序编译的?
p>
【标准答案】
#ifdef
__cplusplus
cout<<“c++
#else
cout<<
#endif
(这个以前还真没注意过,涨姿势了。。。)
4. C
和
C++
有什么不同
?
【参考答案】
从机制上:
c
是面向过程的(但
c
也可以编写面
向对象的程序);
c++
是面向对象
的,
提供了类。
但是,
c++
编写面向对象的程序比
c
容易。
2
从适用的方向:
c
< br>适合要求代码体积小的,效率高的场合,如
嵌入式
;
p>
c++
适合更上层的,复杂的
; linu
x
核心大部分是
c
写的,因为它是系统
软件,效率要求极高。
从名称上也可
以看出,
c++
比
c
< br>多了
+
,说明
c++
是
c
的超集;那为什么
不
叫
c+
而叫
c++
呢,
是因为
c++
比
c
来说扩充的东西太多了,
所以就在
c
后面放上两个
+
;于是就成了
c++
。
C
语言<
/p>
是结构化编程语言,
C++
是面向对象编
程语言。
C++
侧重于对象
而不是过程,侧重于类的设计而不是逻辑的设计。
关于这个问题,个人觉得《
Effective
C++
》上面第一条说的很好,
View C++ as a federation of languages.
把
C++
当做一个语言联邦。
C++
由四部分组成
1>
c
语言
部分;
2>
面向对象部分,包括封装、继承、多态这些
C
语言所没有的特性;
3>
泛型编程部分,
大多数类、
函数要考虑到把它设计成模板,
方便复用;
3
4>
STL
库,里面封装了大量的优秀模板,是
< br>3>
中内容的集成,学会使
用它们可以让代码更高效。<
/p>
当然,
最好去深入了解
STL
源码,
那样会对
C++
有
更深的理解。
5.“
引用
”
与指针的区别是什么?
【参考答案】
指针通过某个指针
变量指向一个对象后,对它所指向的变量间接操作。
程序中使
用指针,程序的可读性差;而引用本身就是目标变量的别名,
对引用的操作就是对目标变
量的操作。
在另一本
C++
著作
《
More Effective C++
》
里,
第一条就是论述
point
和
reference
的区别
总结一下,
1>
指针是一个存储地址的变量,
而引用是一个变量的别名。
所
以在一个
函数中,传引用要比传指针速度更快。
2>
指针可以指向一个空值,
而引用必须初始化。<
/p>
指针可以如下形式出现
[cpp]
view
plaincopy
1.
int
*p;
是合法但不合理的
(
相当于是一个野指针
)
。
4
可以声明一个指向空值的指针
[cpp]
view
plaincopy
1.
int
*p=null
而引用不行
[cpp]
view
plaincopy
1.
int
&r;
是错误的
引用必须初始化为一个变量的别名,如
[cpp]
view
plaincopy
1.
int
a=5;
2.
int
&r=a;
3>
也是因为
2>
的特性,指针在使用前
要判断是否为空,而引用必定不为空
(
否
则会报错
)
,所以不用判断。
4>
指针可以更改指向的内存地址,
而引用是和变量绑定的,不可更改。
5>
在运算符重载过程中,通常返回
一个引用往往比返回一个指针更好,
使用指针易引起语义上的歧义。
6.
5
class A
{
virtual void
func1()
;
void func2();
}
;
class B: class A
{
void
func1()
{
cout<<
}
virtual void
func2()
{
cout<<
6
}
A, A
中的
func1
和
B
中的
func2
都是虚函数
B, A
中的
func1
和
B
中的
func2
都不是虚函数
.
C, A
中的
< br>func2
是虚函数
.
,
B
中的
func1
不
是虚函数
.
D, A
中的
func2
不是虚函数,
B
中的
func1
是虚函数
.
【标准答案】
A
水题。。
id[sizeof(unsigned
long)];
这个对吗?为什么?
【标准答案】
正确
这个
sizeof
是编译时运算符,
编译时就确定了
可以看成和机器有关的
常量。
8.
某文件中定义的静态全局变量<
/p>
(
或称静态外部变量
)
< br>其作用域是
()?
A.
只限某个函数
B.
本文件
7
C.
跨文件
D.
不限制作用域
【参考答案】
B
。静态全局变量则限制了其作用域,
即只在定义该变量
的源文件内有效,
在同一源程序的其它源文件中不能使用它。由于静
态全局变量的
作用域局限于一个源文件内,
只能为该源文件内的函数公
用,<
/p>
因此可以避免在其它源文件中引起错误。
在《
C
和指
针》上看过,
static
关键字会改变具有外部链接性的变量
和
函数
9
.C++
函数中值的传递方式有哪几种
?
【标准答案】
C++
函数的三种传递方式为:值传递、指针传递和引用传递。
(
指针传递就是通常说的地址传递
)
< br>
10.
对于一个频繁使用的
短小函数
,
在
C
语言中应用什么实现
,
在
C++
p>
中
应用什么实现
?
8
【标
准答案】
c
用宏定义,
c++
用
inline
de
fine
实现的函数功能容易出
bug
,所以在
c++
中最好不要使用
11.
引用与指针有什么区别?
【参考答案】
1)
引用必须被初始化,指针不必。
2)
引用初始化以后不能被改变,指针可以改变所指的对象。
3)
不存在指向空值的引用,但是存在指向空值的指针。
可以参考下
在
5
题中补充的内容
< br>12.C++
中
virtual
与
inline
的含义分别是什么?
【参考答案】
在基类成员函数的声明
前加上
virtual
关键字,
意味着
将该成员函数声明
为虚函数。
inl
ine
与函数的定义体放在一起,使该函数称为内联。
inline
是一种用于实现的关键字,而不是用于声明的关键字。<
/p>
??
虚函数
的特点;如果希望派生类能够重新定义基类的方法,
则在基类中
将该方法定义为虚方法,这样可以启用动态联编。
??
内联函数的特点;
使用内联函数的目的是为了提高函数的运行效率。内
联函数体的代码不能过长
,
因为内联函数省去调用函数的时间是以代码
9
膨胀为代价的。内联函数不能包含循环语句,
因为执行循环语句要比调
用函数的开销大。
哈!我想我确实要注意一下表达能力。
。
13.
VC
中,编译工具条内的
Debug
与
Release
选项是什么含义?
【参考答案】
Debug
通常称为调试版本,它包含调试信息,并且不作任何优化,便
于程序员调
试程序。
Release
称为发布
版本,
它往往是进行了各种优化,
使得程序在代码大
小和运行速度上都是最优的,以便用户很好地使用。
Debug
带有大量的调试代码,运行时需要相应的运行库,
发布模式
程序紧凑不含有调试代码和信息,直接可以运行
(如果不需要
运
行库)
14.
函数
assert
的用法
?
p>
【参考答案】断言
assert
是仅在
p>
debug
版本起作用的宏,用于检查“不
应该“发生的情况。程序员可以把
assert
看成一个在任何
系统状态下都
可以安全使用的无害
测试
手段
10
学
VC+
+
的时候见过
assert
宏定义,但
是自己从来没用过。
。
。
与
#define
的比较
,
c
onst
有什么优点
?
【参考答案】
(
1
)
const
常量有数据类型,而宏常量没有数据类型。编译器
可以对
前者进行类型安全检查。
而对后者只进行字符替换,
p>
没有类型安全检查,
并且在字符替换可能会产生意料不到的错误(边
际效应)
。
#define
不能生成
类的专属常量,因为它只是进行简单的替换。
。
(
2
)
有些集成化的调试工具可以对
const
常量进行调试,但是不能
对宏常量进行调试。
《
Effective C++
》中建
议以
const
、
enum
、
inline
代替
#d
efine
。
使用
< br>enum
的原因
有些情况下,
编译器不允许静态常量出现在类的初始设定中,只得以
enum
的形式
另一方面,
enum
和
#define
更相似,它们都没有具体的类
型,比如,
有
constint a;
却没有
#define N int
a
,
enum
和
#define
都不能够被去
地址,而
const
可以。
11
16.
请你谈谈引用和指针的区别。
【参考答案】
(
1
)引用被创建的同时必须被初始化(指针则可以在任何时候被初始
化)
。
(
2
)不能有
NULL
引用,引用必须与合法的存储单元关联
(指针则可
以是
NULL
)
。
(
3<
/p>
)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改
变所指的对象)
。
不断地出现,可见这个问题是经常容易被问到的。
17.
有了
malloc/free
为什么还要
new/delete
?
【参考答案】
malloc
与
free
是
C++/C
语言的标准库函数,
new/delete
是
C++
的
运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,
光用
malloc/free
无法满足动态对象
的要求。
对象在创建的同时要自动执行构造函数,
对象在消亡之前要自动执行析<
/p>
构函数。
由于
malloc/free
是库函
数而不是运算符,不在编译器控制权限之内,
不能够把执行构造函数和析构函数的任务强
加于
malloc/free
。
12
因此
C++
语言需要一个能完成动态内存分配和初始化工作的运算符
new
,以及一个能完成清理与释放
内存工作的运算符
delete
。注意
new/delete
不是库函数。
以前只是习惯在用
C
时用
malloc/free
,用
C++
时用
new/delet
e
,没注
意到这些差异性。
18.
如果在申请动态内存时找不到
足够大的内存块,
malloc
和
new
将
返回
NULL
指针,宣告内存申请失败。你是怎么处理内存耗尽的?
【参考答案】
(
1
)
判断指针是否为
NULL
,
如果是则马上用
return
语句终止本函数。
(
2
)判断指针是否为
NULL
,如果是则马上用
exit(1)
终止整个程序的
运行<
/p>
(
3
)为
new
和
malloc
设置异常处理函数。例如
Visual
C++
可以用
_set_new_hander
函数为
new
设置用户自己定义的异常处理函数,
也
可以让
malloc
享用与
new
相同的异常处理函数。
我一般是直接
return
了
19.C++
是不是类型安全的?
<
/p>
【参考答案】不是。两个不同类型的指针之间可以强制转换(用
1
3
reinterpret
cast)
。
20. const
符号常量;
(1)const char *p
(2)char const *p (
3)char *
const p
说明上面三种描述的区别;
【参考答案】
(1)p
是一个指向
const ch
ar
的指针,
p
是可以改变指向的,但
是
p
指向
的值是不能改变的
;
(2)p
指向的恰好是一个指向<
/p>
const
的
char
< br>的普通指针;
(3)p
是一个
指针,这个指针是指向
char
的
co
nst
指针。
(1)
和
(2)
的定义是一样的。
p>
1
、
2
和
3
的区别在于,
1
和
2
的
const
出现在
*
号左边,
3
出现在
< br>*
号右
边。好像也是在《
C
p>
和指针》上看到的这句话。
21.
用
C++
写个程序,如何判断一个
操作系统
是
16
位还是<
/p>
32
位的?
【
标准答案】定义一个指针
p
,打印出
s
izeof(p),
如果节果是
4
,则
表
示该操作系统是
32
位,打印结果是
2
,表示是
16
位。
14
22.
用
C
++
写个程序,
如何判断一个操作系统是
16
位还是
32
位的?不能
用
sizeof()
函数。
【参考答案】
[cpp]
view
plaincopy
1.
int
a
=
~0;
2.
if(
a>65536
)
3.
{
4.
cout<<
bit
5.
}
6.
else
7.
{
8.
cout<<
bit
9.
}
这个参
考答案估计参考了不少年了。。。现在大部分机器都
32
、
p>
64
位的了,所
以,应该把
65536
改为
4294967296
,来判断机器是
32
位
|| 64
位
23.
[cpp]
view
plaincopy
1.
void
*
(
*
(*fp1)(int))[10];
2.
float
(*(*
fp2)(int,int,int))(int);
3.
int
(*
(
*
fp3)())[10]();
15
-
-
-
-
-
-
-
-
-
上一篇:c#问题(20个必须知道的问题)
下一篇:关于励志的英文简短故事