构造函数初始化列表

构造函数初始化列表

// panduan.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include<math.h>

using namespace std;

class A {
public:
	A(int a)
	{
		m_a = a;
	}
	void printfa()
	{
		cout << "A" << m_a << endl;
	}
private:
	int m_a;
};
class B {
public:
	B(A &a1, A&a2, int b) :m_a1(a1), m_a2(a2)
	{
		m_b = b;
	}
	//构造对象成员的顺序根初始化列表的顺序无关
	//而是跟成员对象的定义有关
	B(int a1, int a2, int b) :m_a1(a1), m_a2(a2)
	{
		m_b = b;
	}
	void printfb()
	{
		cout << "B" << m_b << endl;
	}
	~B() {
		cout << "B析构" <<m_b<< endl;
		m_a1.printfa();
		m_a2.printfa();
	}
private:
	int m_b;
	A m_a1;
	A m_a2;
};
void test1()
{
	A a1(10);
	A a2(20);
	B b1(a1, a2, 100);
	b1.printfb();
}
int main()
{ 
	B b(10, 20, 30);
	b.printfb();

    return 0;
}

练习

// panduan.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include<math.h>

using namespace std;

class ABCD {
public:
	ABCD(int a, int b, int c)
	{
		m_a = a;
		m_b = b;
		m_c = c;
		cout << "a=" << a << "b=" << b << "c=" << c << endl;
	}
	~ABCD()
	{
		cout << "ABCD析构" << endl;
	}
	int geta()
	{
		return m_a;
	}
private:
	int m_a;
	int m_b; 
	int m_c;
};
class me {
public:
	me() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100)//无参构造
	{
		cout << "me()" << endl;
	}
	~me()
	{
		cout << "me析构" << endl;
	}
	me(const me&obj) :abcd1(7, 8, 9), abcd2(10, 11, 12), m(100)//拷贝构造
	{
		cout << "me const" << endl;
	}
	ABCD func()
	{
		return abcd1;
	}
private:
	ABCD abcd1;
	ABCD abcd2;
	const int m;

};
void dothing(me mm)//调用mm的拷贝构造,传入参数
{
	cout << "dothing" << mm.func().geta() << endl;
}
int run()
{
	me m;
	dothing(m);
	return 0;
}
int run2()
{
	cout << "run2 start" << endl;
	//ABCD(400, 500, 600);//临时对象的生命周
	ABCD aaa= ABCD(400, 500, 600);
	cout << "run2 endl" << endl;
	return 0;
}
int main()
{ 
	//run();
	run2();
	return 0;
}

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值