变量(int)
静态变量(static int)
常量(const int )
静态常量(static const int)
2.对应的初始化方式是:
一般变量可以在初始化列表里或者构造函数里初始化,不能直接初始化或者类外初始化
静态成员变量必须在类外初始化
常量必须在初始化列表里初始化
静态常量必须只能在定义的时候初始化
3.举一个简单的例子
#include <iostream>
#include <string>
using namespace std;
class Test
{
private:
int a;
static int b;
const int c;
static const int d=4; //静态常量--定义的同时初始化
public:
Test():c(3)//,a(1)或者在初始化列表里初始化 //常量const--初始化列表(并不是构造函数)
{
a=1;
}
};
int Test::b=2; //静态变量staticvoid main()
{
Test t;
}
4.初始化成员数据的方法
C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。
C++初始化的方式包括构造函数内部赋值初始化方法和构造函数初始化列表的方法
class CExample
{
public:
int a;
float b;
//构造函数初始化列表-------------------------------A
CExample(): a(0),b(8.8){}
{a=0;
//构造函数内部赋值二---------------------------------B2
CExample(int m,int n)
{a=m;
b=n;}
};
PS:关于构造函数初始化列表的几点说明:
在初始化列表中需要注意的:
例:
例:Test::Test(int a,string b,double c):r1(a),r2(b),r3(a*c){};
4.在构造函数中用初始化列表去给成员变量赋值要比在构造函数体中赋值的效率要高
为什么要说它效率高呢?在《C++ Primer》中写到:
从概念上讲,可以认为构造函数分两个阶段执行:(1)初始化阶段;(2)普通的计算阶段。
计算阶段由构造函数函数体中的所有语句组成。并且,不管成员变量是否在构造函数初始化列表中显式初始化,在执行构造函数之前,都要初始化成员变量。所以,在上面的实验例子中,首先会调用构造函数的初始化列表(先初始化),再去检查在构造函数的函数体内是否有其他赋值、计算之类的运算(再计算)。于是,我把第三个构造方法改为:
在初始化列表中---实例举例子说明:
编写一个有理函数Ratio,数据成员包括分母den,分子num,及一个disp()方法,以a/b的形式来表示有理数的形式。要求为该类写三个构造函数,分别满足以下几个条件:
1.使用初始化列表的默认构造函数;
2.使用初始化列表的带一个参数的构造函数;
3.使用初始化列表的带两个参数的构造函数
输出结果: