类成员初始化总结 //目的:本程序测试常量成员变量、引用成员变量、类成员变量在类构造函数中初始化的问题 //测试结果:常量成员变量必须在类构造函数(无参数可用常量,带参数可用参数)时使用成员初始化方法初始化 // 引用成员变量必须在类构造函数(必须带参数)时使用成员初始化方法初始化,引用实际上只是一个变量的别名 // 类成员变量有两种情况:1.类成员变量有默认(即自己没写任何构造函数)构造函数(或自己写了一个无参数构造函数),类的构造函数可以不对类成员变量初始化(其实编译器自动对类成员变量调用默认或无参的成员变量构造函数初始化了) // 2.类成员变量只有带参数的构造函数(同时自己没写无参数构造函数),类的构造函数必须对类成员变量初始化,编译器不会自动调用默认构造函数对成员变量初始化 // 3.类成员变量有自己写的无参数构造函数和其他带参数构造函数时,类的构造函数没有对类成员变量初始化时调用类成员变量的无参数构造函数对其初始化,类的 构造函数对类成员变量初始化时调用类成员变量的带参数构造函数对其初始化 //目的:本程序测试常量成员变量、引用成员变量、类成员变量在类构造函数中初始化的问题//测试结果:常量成员变量必须在类构造函数(无参数可用常量,带参数可用参数)时使用成员初始化方法初始化// 引用成员变量必须在类构造函数(必须带参数)时使用成员初始化方法初始化,引用实际上只是一个变量的别名// 类成员变量有两种情况:1.类成员变量有默认(即自己没写任何构造函数)构造函数(或自己写了一个无参数构造函数),类的构造函数可以不对类成员变量初始化(其实编译器自动对类成员变量调用默认或无参的成员变量构造函数初始化了)// 2.类成员变量只有带参数的构造函数(同时自己没写无参数构造函数),类的构造函数必须对类成员变量初始化,编译器不会自动调用默认构造函数对成员变量初始化// 3.类成员变量有自己写的无参数构造函数和其他带参数构造函数时,类的构造函数没有对类成员变量初始化时调用类成员变量的无参数构造函数对其初始化,类的 构造函数对类成员变量初始化时调用类成员变量的带参数构造函数对其初始化#include <iostream>#include <cstdlib>#include <new>//内存分配#include <ctime>//时间相关头文件using namespace std;int getrand()//产生一个随机值{ srand((unsigned)time(NULL)); return rand();}class base{ //const int m_nx; int &m_nx;public: //base():m_nx(0) {cout << "class base construction(no para)" << endl;} base(int n):m_nx(n)//初始化 { //m_nx = n; cout << "class base construction(have para)" << endl; } int getx() {return m_nx;} //void setx(int i){m_nx = i;}};class driver{public: base m_basei; driver(int n):m_basei(n) { cout << "class driver construction" << endl; }};int main(){ driver obj(getrand()); cout << "The obj.m_basei's value :" <<obj.m_basei.getx() << endl; return 0;}