解决的问题1: 在B类中 组合了一个 A类对象 (A类设计了构造函数)(根据构造函数的调用规则 设计A的构造函数, 必须要用;但是没有机会初始化A)
解决的问题2: 为const常量赋值(const常量需要在类中赋值,而静态成员变量需要在类的外部用作用域符(类型 类名::变量名=?)进行赋值)
构造函数的初始化列表有严格的构造顺序和析构顺序:先执行 被组合对象的构造函数 (即构造对象A)(如果组合对象有多个,按照定义顺序, 而不是按照初始化列表的顺序)(析构函数 : 和构造函数的调用顺序相反,先构造的后析构)
#include "iostream"
using namespace std;
class A
{
public:
A(int m_a)
{
a = m_a;
cout << "A的构造函数" << " a=" << a << endl;
}
~A()
{
cout << "A的析构函数" << " a=" << a << endl;
}
private:
int a;
};
//1 问题: 在B类中 组合了一个 A类对象 (A类设计了构造函数)(根据构造函数的调用规则 设计A的构造函数, 必须要用;但是没有机会初始化A)
//新的语法 Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)//其中m1,m2,m3就是另外一个类的对象元素
class B
{
public:
B(int m_a, int m_b,int m,int n) :a1(m), b1(n),x(2)//给const 属性赋值//这就是构造初始化列表
{
a = m_a;
b = m_b;
cout << "B的构造函数" << " a=" << a << " b=" << b << endl;
}
static void getC() //静态成员函数 (静态函数的调用方法: 类名::getC() )
{
cout << "c:" << c << endl;
//请问:在静态成员函数中,能调用 普通成员属性 或者 普通成员函数吗?
//cout << "a:" << a << endl; //error C2597: 对非静态成员“BB::a”的非法引用,静态成员函数只能引用静态成员变量不能引用非静态成员变量
}
~B()
{
cout << "B的析构函数" << endl;
}
private:
int a; int b;
A a1; A b1;//定义顺序
const int x;//const常量需要在类中赋值,而静态成员变量需要在类的外部用作用域符(类型 类名::变量名=?)赋值
static int y;//静态成员变量(静态成员变量只能在类的外部通过域名符::进行赋值)
};
//静态成员函数只能引用静态成员变量不能引用非静态成员变量
int B::y = 10;//对静态成员变量的赋值 类名 ::变量名
//2 先执行 被组合对象的构造函数 (即构造对象A)
//如果组合对象有多个,按照定义顺序, 而不是按照初始化列表的顺序(从定义顺序a1-->b1)
//析构函数 : 和构造函数的调用顺序相反(先析构b1再析构a1)
//3 被组合对象的构造顺序 与定义顺序有关系 ,与初始化列表的顺序没有关系.
//4 初始化列表 用来 给const 属性赋值
void main()
{
B play(1,2,3,4);
b::getC();//静态函数的调用
}