const成员或者引用成员必须使用构造函数初始化列表的方式

#include<iostream.h>
class A
{
    const int a;
    int b;
};
void main()
{
    A obja;
}
编译出现如下错误:error C2512: 'A' : no appropriate default constructor available;
如果将const去掉就没错了!
#include<iostream.h>
class A
{  public:
    const int a;
    int b;
    A(int x):a(x){}

};
void main()
{
    A obja(2);
    cout<<obja.a<<endl;
    cout<<obja.b<<endl;//不会自动初始化的
}

构造函数的初始化方式有两种方式
1》在构造函数的体内用赋值语句的方式。
2》用构造函数初始化列表的方式。
需要注意的是,初始化列表的执行先于构造函数体的执行。并且,一些特殊成员,比如常量成员和引用成员,都必须在初始化列表中进行初始化。
这就说明了一旦一个类中有const成员或者引用成员,这就不能使用缺省的构造函数。必须使用用户自定义的构造函数进行初始化;而且使用表达式的方式进行初始化。
#include<iostream.h>
class A
{  public:
    int &a;
    int b;
//a是b的引用 A():b(
9),a(b){}//引用和const成员一样,必须使用这种形式。 }; void main() { A obja; cout<<obja.a<<endl; }

 

#include<iostream.h>
class A
{  
public:
    const int a;
    A(int x):a(x){}
};
class B:public  A{
public:
    B(int x):A(x){}
};
void main()
{
    A obja(2);
    B objb(3);
    cout<<obja.a<<endl;
    cout<<objb.a<<endl;
}

 

转载于:https://www.cnblogs.com/leijiangtao/p/4488988.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值