C++核心编程10 构造函数、析构函数、拷贝构造函数

一、构造函数、析构函数、拷贝构造函数

  1. 构造函数:是一个类里用于创建对象的特殊子程序。它能初始化一个新建的对象,并时常会接受参数用以设定实例变量。
  2. 写法:没有返回值,不写void,函数名与类名相同;可以有参数,也可以发生函数重载;由编译器自动调用,不需要手动调用,且编译器只调用一次。
class MyClass
{
public:
	//1、构造函数的写法
	MyClass()
	{
		cout << "MyClass的构造函数调用" << endl;
	}
};

        3.分类:按参数分:有参构造函数、无参构造函数

                      按类型分:普通构造函数、拷贝构造函数

拷贝构造函数:是一种特殊的构造函数,习惯上用来创建一个全新的对象,这个全新的对象相当于已存在对象的副本。这种构造函数只有一个参数:就是用来复制对象的引用(常用const修饰)。

class Person
{
public:
	//默认构造函数(无参构造函数)
	Person()
	{
		cout << "Person的默认构造函数" << endl;
	}
	//有参构造函数
	Person(int age)
	{
		m_Age = age;
		cout << "Person的有参构造函数调用" << endl;
	}
	//拷贝构造函数
	Person(const Person& p)//类名(const 类名&aa)
	{
		m_Age = p.m_Age;
		cout << "Person的拷贝构造函数调用" << endl;
	}
	int m_Age;
};

           4.调用方法

  • 无参数构造函数:
void test01()
{
	//无参构造函数
	Person p;
}
  •  有参构造函数三种:括号法、显示法、隐式法
void test02()
{
   	//括号法
	Person p2(10);//有参构造
	Person p3(p2);//拷贝构造函数调
	cout << "p3的年龄:" << p3.m_Age << endl;

}
void test03()
{
    //显示法
	Person p4 = Person(10);//有参构造
	Person p5 = Person(p4);//拷贝构造函数调

	//注意点
	//Person p();//不可以用括号法 调用无参构造 原因:Person p();这句话编译器会认为是一个函数声明
	Person(10);//匿名对象 特点:当执行完之后,系统就回收了
}
void test04()
{
    
	//隐式法 可读性不高
	Person p6 = 10;//Person p6=10; 等价于 写了Person p6=Person(10);
	Person p7 = p6;
}

二、析构函数

  1. 析构函数:在面向对象程序设计里是一个方法,当对象的生命周期结束时,它会自动地被调用执行。它的最主要目的在于,清空并释放对象先前创建或是占用地存储器资源。
  2. 写法:没有返回值,不写void,函数名与类名相同,在函数名前加~;不能有参数,不可以发生重载;由编译器自动调用,不需要手动调用,且编译器只调用一次。
class Myclass
{
    //2、析构函数的写法
	~MyClass()
	{
		cout << "MyClass的析构函数调用" << endl;
	}

}

	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值