#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//对象的初始化和清理
//1.构造函数 进行初始化操作
//函数的分类及调用
//分类
// 按照参数分类 无参构造(默认构造)和 有参构造
//按照类型分类 普通构造 拷贝构造
class Person
{
//1.1构造函数
//没有返回值 不用写void
//函数名 与类名相同
//构造函数可以有参数,可以发生重载
//创建对象的时候,构造函数会自动调用,而且只调用一次
public:
Person()
{
cout << "Person 的构造函数调用" << endl;
}
Person(int a)
{
cout << "Person 的有参构造函数调用" << endl;
age = a;
}
//拷贝构造函数
Person(const Person& a)
{
age = a.age;
cout << "Person 的拷贝函数调用" << endl;
}
//2.析构函数 进行清理的操作
//没有返回值 不写void
//函数名与类名相同但在名称前加~
//析构函数不可以有参数,不可以发生重载
//对象在销毁前 会自动调用析构函数,而且只会调用一次
~Person()
{
cout << "Person 的析构函数的调用" << endl;
}
int age;
};
//构造和析构都是必须有的实现,如果我们不自己提供,编译器会自己提供一个空实现的构造和析构
void test()
{
//1.括号法
Person a;//在栈上的数据,test()执行完毕后,释放这个对象//默认函数调用
//Person a2(10);//有参构造函数
//Person a3(a2);//拷贝构造函数
//注意事项
// 调用默认构造函数时,不要加()
//因为下面这行代码,编译器会默认是一个函数的声明
/*Person p1();*/
//2.显示法
//Person p1;
//Person p2 = Person(10);//有参构造
Person p3 = Person(p2);//拷贝构造
//Person(10);//匿名对象 特点:当前行执行结束后,系统会立即回收掉匿名对象
//cout << "aaaa" << endl;
//注意事项2
//不要利用拷贝构造函数 初始化匿名对象
//编译器会认为Person(p3)==Person p3 对象声明
//Person(p3);
3.隐式转换法
//Person p4 = 10;//相当于 写了 Person p4=Person(10); 有参构造
//Person p5 = p4;//构造函数
//cout << "a2的年纪为:" <<a2.age<< endl;
//cout << "a3的年纪为:" << a3.age << endl;
}
int main()
{
test();
system("pause");//程序运行到这一步会停止当按任意键之后才会释放对象从而打印析构函数
return 0;
}
函数的分类及调用(类和对象c++)
最新推荐文章于 2024-09-16 19:12:24 发布
文章介绍了C++中类的构造函数和析构函数的作用,包括无参构造、有参构造和拷贝构造,以及它们在对象初始化和清理中的应用。同时,提到了对象生命周期中构造函数和析构函数的自动调用,并通过示例展示了不同构造函数的调用方式。
摘要由CSDN通过智能技术生成