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

解决的问题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();//静态函数的调用
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值