c++

有一个类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.需要初始化引用成员数据
因为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 < 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类中添加一个构造函数解决问题。
解析:派生类必须显示定义构造函数(且在构造函数的初始化列表中调用基类的构造函数),否则无法构造派生类的对象,没有合适的构造函数可以调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值