class A

{

public:

A(){};

  const int num;

  CString& s;

}

A::A()

{

  cout<<A con<<endl;

}

void main()

{

  A a;

}

这是不过的,因为const成员变量需要在构造函数调用进入函数体之前就要被初始化,所以

C++有一种语法叫做 成员初始化列表。

构造函数改为

A::A():num(5):s(myString)

{

  cout<<A con<<endl;

}

这样const int num被初始化为5,s被初始化为myString。

只有构造函数有这个语法,并且const和引用必须这样初始化。

下面这种情况是一个类的成员变量是一个类对象。

#include "stdafx.h"

class ClassA
{
public:
ClassA(int a)
{
m_a=a;
printf("ClassA con");
}
int m_a;
}; class ClassB
{
public:
ClassB();
ClassA a;
}; ClassB::ClassB():a(2)
{
printf("ClassB con");
}
int _tmain(int argc, _TCHAR* argv[])
{
ClassB* b=new ClassB;
return 0;
}

  因为ClassA已经提供了一个有参数的构造函数,编译器不再提供默认的无参构造函数。所以ClassB如果不初始化a对象的话,是编译不过去的

所以在ClassB的构造函数初始化了a对象。

初始化成员列表 ——— 类的const成员和引用成员的初始化的更多相关文章

  1. 类的const成员

    类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他 ...

  2. C++中的初始化参数列表

    c++中以下几种情况的变量的初始化不可以写在构造函数里,而是要写在初始化参数列表中 1.const常量 class AA { public : const int num; public : AA() ...

  3. 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数

    一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一).对象成员及其初始化  C++ Code  1 2 3 4 5 6 7 8 9 1 ...

  4. 初始化列表(const和引用成员)、拷贝构造函数

    一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 构造函数的执行分为两个阶段 初始化段 普通计算段 (一).对象成员及其初始化  C++ Code  1 2 3 4 5 6 7 8 9 1 ...

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

    #include<iostream.h> class A { const int a; int b; }; void main() { A obja; }编译出现如下错误:error C2 ...

  6. C++类中引用成员和常量成员的初始化(初始化列表)

    如果一个类是这样定义的: Class A { public: A(int pram1, int pram2, int pram3); privite: int a; int &b; const ...

  7. 类内const static(static const)成员变量初始化问题

    在查找const相关资料的过程中,又遇到了另外一个问题,就是C++类中const static(或者static const)成员变量应当如何初始化的问题. 查阅了许多资料,发现VC环境下,只允许co ...

  8. 遇到一个很古怪的问题,C++类static const成员的初始化

    在我的文件里有这class NFDuration, NFDuration.h里是这样的: // A Duration represents the elapsed time between two i ...

  9. C++类的成员函数的形参列表后面的const

    看到(C++ Primer)类的成员函数这里,突然对成员函数形参列表后面的const感到迷惑. 因为书中开始说是修饰隐含形参this的,然后又说是声明该函数是只读的. 大为不解! 翻资料.找人讨论.. ...

随机推荐

  1. 将字符串拆分为id

    Sql : alter function [fn_splitSTR] ( ), -- 5,6,7 ) -- ',' ) )) as begin declare @splitlen int begin ...

  2. c++语法随身记

    1.memset是计算机中C/C++语言函数.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的 ...

  3. sublime开发php必备工具集合(mac)

    sublime开发php必备工具集合(Mac) 相关链接:http://benmatselby.github.io/sublime-phpcs/ 目标: 直接在sublime中运行php代码 按PSR ...

  4. C#中的委托

    public delegate void SayHello(string name); class Program { static void Main(string[] args) { SayHel ...

  5. ARM compiler No such file or directory

    /********************************************************************************* * ARM compiler No ...

  6. javascript 封装(给自己看)

    HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  7. 对于unallocated space的翻译 我想说几句话

    在sqlserver中,当我们使用sp_spaceused查看数据库空间使用情况的时候 会看到属性unallocated space.所有的中文翻译都是“未保留供数据库对象使用的数据库空间”, 作为中 ...

  8. 机器学习(一) 从一个R语言案例学线性回归

    写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等.但既然本文名为<从一个R语言案例学会线性回归>,那就更重视如何使用R语言去解决线 ...

  9. springMvc源码学习之:spring源码总结

    转载自:http://www.cnblogs.com/davidwang456/p/4213652.html spring beans下面有如下源文件包: org.springframework.be ...

  10. Django 的开始之路

    django源码安装 检查是否安装成功 1.在命令行进入Django环境 在新建完项目后 进入带有manage.py的目录,执行以下文件. python manage.py  shell 2.Djan ...