c++

来源:互联网 发布:淘宝定制品可以退货吗 编辑:程序博客网 时间:2024/06/05 06:57
有一个类A,其数据成员如下:
1
2
3
4
5
6
7
8
9
10
classA {
...
private:
     inta;
public:
     constint b;
     float* &c;
     staticconst char* d;
     staticdouble* e;
};
则构造函数中,成员变量一定要通过初始化列表来初始化的是:b、c。

解析:构造函数初始化时必须采用初始化列表一共有三种情况,
 
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选项正确。
3.代码可以通过编译吗?如果不能应该如何修改?(D)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<classT> class Foo{
        T tVar;
    public:
        Foo(T t) : tVar(t) { }
};
 
template<classT> class FooDerived:public Foo<T>
{
};
 
int main()
{
    FooDerived<int> d(5);
    return0;
}

代码可以正确通过编译。
编译错误,FooDerived是一个继承模板类的非模板类,它的类型不能改变。
编译错误,tVal变量是一个不确定的类型。
编译错误,可以在FooDerived类中添加一个构造函数解决问题。
解析:派生类必须显示定义构造函数(且在构造函数的初始化列表中调用基类的构造函数),否则无法构造派生类的对象,没有合适的构造函数可以调用
0 0