C++学习之路——构造函数的分类和调用

两种分类方式:

  • 按参数分为:有参构造和无参构造
  • 按类型分为:普通构造和拷贝构造

 三种调用方式:

  • 括号法
  • 显示法
  • 隐式调用法
#include
using namespace std;

class person 
{
//作用域
public:
	//参数分类:无参(默认构造)和有参
	person()
	{
		cout << "person的无参的构造函数的调用" << endl;
	}

	person(int num)
	{
		m_age = num;
		cout << "person的有参的构造函数的调用" << endl;
	}

	//按照类型分类:普通构造和拷贝构造函数
	//拷贝构造函数:
	person(const person &p)
	{
		m_age = p.m_age;
		cout << "person的拷贝构造函数的调用" << endl;
	}


	~person()
	{
		cout << "person的析构函数的调用" << endl;
	}
	int m_age;

};

void test()
{
	//1.括号法
	person p1; //默认构造函数的调用
	person p2(10); //有参构造函数的调用
	person p3(p2); //拷贝构造函数的调用
	//注意事项1:调用默认构造函数时候,不要加();
	//因为这行代码代码,编译器会认为是一个函数的声明:例如 
	//void func()
	//person p1()
	cout << "p2的年龄为" << p2.m_age << endl;
	cout << "p3的年龄为" << p3.m_age << endl;
	//2.显示法
	person p4;
	person p5 = person(10);//有参构造
	person p6 = person(p5);//拷贝构造

	//注意事项2:
	//person(10) //匿名对象
	//匿名对象特点:当前行执行结束后,系统会立即回收掉匿名对象,运行完该行,会先析构
	
	//注意事项3:不要利用拷贝构造函数来初始化一个匿名对象

	//person(p6);
	//编译器会认为person(p6) === person p6;会认为是一个对象的声明

	//3.隐式传递法
	person p7 = 10; //相当于写了person p7=person(10);
	person p8 = p7; //相当于写了person p8=person(p7);
}


//构造和析构都是必须有的实现,如果不提供,编译器会提供一个空实现和析构
int main() 
{
	test();
	cout << "程序运行结束" << endl;
	system("pause");
	return 0;
}

你可能感兴趣的:(c++,分类,开发语言)