#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();
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(),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();
B objb();
cout<<obja.a<<endl;
cout<<objb.a<<endl;
}

const成员或者引用成员必须使用构造函数初始化列表的方式的更多相关文章

  1. C++构造函数初始化列表与构造函数中的赋值的区别

    C++类中成员变量的初始化有两种方式:构造函数初始化列表和构造函数体内赋值. 一.内部数据类型(char,int……指针等) class Animal { public: Animal(int wei ...

  2. 10.C++-构造函数初始化列表、类const成员、对象构造顺序、析构函数

    首先回忆下,以前学的const 单独使用const修饰变量时,是定义的常量,比如:const int i=1; 使用volatile const修饰变量时,定义的是只读变量 使用const & ...

  3. C++类构造函数初始化列表

    C++类构造函数初始化列表 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample {public:     ...

  4. C++中为什么构造函数初始化列表

    已经有个构造函数负责初始化,为什么还需要构造函数初始化表呢? 在以下三种情况下需要使用初始化成员列表:一,需要初始化的数据成员是对象的情况:二,需要初始化const修饰的类成员:三,需要初始化引用成员 ...

  5. C++构造函数初始化列表与赋值

    C++中类的初始化操作一般有四个部分组成: 1.构造函数初始化列表 2.构造函数体内赋值 3.类外部初始化 4.类声明时直接赋值 对于内部数据类型(char,int,float...),构造函数初始化 ...

  6. C++类构造函数初始化列表(转)

    构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: { public:     int a;     float b;     //构 ...

  7. c++中的构造函数初始化列表

    三种情况下,必须在构造函数初始化列表中初始化成员: 1.const成员 2.引用成员 3.没有默认构造函数的成员

  8. <四>构造函数初始化列表

    示例代码1 点击查看代码 class CDate{ public: CDate(int _year,int _month, int _day){ this->year=_year; this-& ...

  9. 初始化成员列表 ——— 类的const成员和引用成员的初始化

    class A { public: A(){}; const int num; CString& s; } A::A() { cout<<A con<<endl; } ...

随机推荐

  1. IIS服务器支持.apk文件下载

    随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...

  2. 再谈Cognos报表设计中的维度函数

    在报表设计的过程中,客户很多时候会想看同比.环比的数据,很多人会想到利用日期函数在数据库中处理好然后直接在报表拖出来使用,其实这样加大了数据库的压力,当然也是解决问题的一种思路.今天我们就来说一下如何 ...

  3. API的文件遍历,未使用CFileFind,因为里面牵扯MFC,编个DLL好麻烦。

    // FindFileDebug.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "FindFileDebug. ...

  4. ssh-keygen配置

    1) 在本地机器中的~/.ssh/目录下执行下命令, ssh-keygen -t dsa 将生成两个文件,id_dsa和id_dsa.pub. 2) 将id_dsa.pub拷贝到远程机器,并且将id_ ...

  5. iOS子线程操作检测版本更新,有新版本通知用户更新, CheckVersion

    iOS子线程操作检测版本更新,有新版本通知用户更新 CheckVersion 一:如何使用: #import "CheckVersion.h" //输入你的app在appStore ...

  6. 彻底告别加解密模块代码拷贝-JCE核心Cpiher详解

    前提 javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适.Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种 ...

  7. taro 环境判断

    Taro.ENV_TYPE ENV_TYPE.WEAPP 微信小程序环境 ENV_TYPE.SWAN 百度小程序环境 ENV_TYPE.ALIPAY 支付宝小程序环境 ENV_TYPE.TT 字节跳动 ...

  8. javascript forEach方法与jQuery each区别

    1.forEach方法 语法: array.forEach(function(currentValue, index, arr), thisValue) 参数: 示例: <!DOCTYPE ht ...

  9. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 SharePoint 管理中心

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 SharePoint 管理中心         虽然这本书不重于管理.对 ...

  10. jquery获取json对象中的key小技巧,遍历json串所有key,value

    比如有一个json var json = {"name" : "Tom", "age" : 18}; 想分别获取它的key 和 value ...