有一个类A,其数据成员如下:
1
2
3
4
5
6
7
8
9
10
|
class
A {
...
private
:
int
a;
public
:
const
int
b;
float
* &c;
static
const
char
* d;
static
double
* e;
};
|
则构造函数中,成员变量一定要通过初始化列表来初始化的是:b、c。
解析:构造函数初始化时必须采用初始化列表一共有三种情况,
1.需要初始化的数据成员是对象(继承时调用基类构造函数)
2.需要初始化const修饰的类成员
3.需要初始化引用成员数据
3.代码可以通过编译吗?如果不能应该如何修改?(D)
解析:派生类必须显示定义构造函数(且在构造函数的初始化列表中调用基类的构造函数),否则无法构造派生类的对象,没有合适的构造函数可以调用
解析:构造函数初始化时必须采用初始化列表一共有三种情况,
1.需要初始化的数据成员是对象(继承时调用基类构造函数)
2.需要初始化const修饰的类成员
3.需要初始化引用成员数据
因为static属于类并不属于具体的对象,所以
static成员是不允许在类内初始化的,那么static const 成员是不是在初始化列表中呢?
答案是NO
一是static属于类,它在未实例化的时候就已经存在了,而构造函数的初始化列表,只有在实例化的时候才执行。
二是static成员不属于对象。我们在调用构造函数自然是创建对象,一个跟对象没直接关系的成员要它做什么呢
2. C++语言中,有关类的初始化叙述正确的是(AD)
A.静态函数中不能出现this指针
B.可以在类定义时,对对象直接初始化
C.一般数据类型可以在类的外部进行初始化
D.静态数据类型可以在类的外部进行初始化解析: A:静态函数属于类本身,不与类绑定,因此不能用this指针。A选项正确。B:在类定义时,无法使用构造函数,因而无法完成对象的初始化C:一般成员变量需要在类内进行初始化D:静态成员变量必须在类外初始化,静态成员常量在类中初始化。D选项正确。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
template
<
class
T>
class
Foo{
T tVar;
public
:
Foo(T t) : tVar(t) { }
};
template
<
class
T>
class
FooDerived:
public
Foo<T>
{
};
int
main()
{
FooDerived<
int
> d(5);
return
0;
}
|
代码可以正确通过编译。
编译错误,FooDerived是一个继承模板类的非模板类,它的类型不能改变。
编译错误,tVal变量是一个不确定的类型。
编译错误,可以在FooDerived类中添加一个构造函数解决问题。