7.构造函数的分类及调用
2021-01-29 本文已影响0人
lxr_
#include<iostream>
using namespace std;
//***两种分类方式:
//1.按参数分为:有参构造和无参构造
//2.普通构造和拷贝构造
class person
{
public:
int age;
person()
{
cout << "person无参构造函数的调用" << endl;
}
person(int a)
{
age = a;
cout << "person有参构造函数的调用" << endl;
}
//拷贝构造函数
person(const person& p)
{
//将传入的参数的所有属性拷贝到我身上
age = p.age;
cout << "person拷贝构造函数的调用" << endl;
}
~person()
{
cout << "person析构函数的调用" << endl;
}
};
void test02()
{
//三种调用方式:
//1.****括号法***;
//person p1;//默认构造函数调用,不用写括号
//person p2(10);//有参构造函数
//person p3(p2);//拷贝构造
//cout << "p2年龄:" << p2.age << endl;
//cout << "p3年龄:" << p3.age << endl;
//person p1();//********编译器会认为这是一个函数的声明,不会创建对象*******
//2.显式法;
//person p1;
//person p2 = person(10);//有参构造
//person p3 = person(p2);//拷贝构造
//person(10);//匿名对象,当前行执行后,系统会立即回收掉匿名对象
//cout << "此处还没有打印,匿名对象已回收" << endl;
//***不要利用拷贝构造函数初始化匿名对象***,编译器会认为person (p3)==person p3;编译器会认为这是对象的声明,会重定义
/*person(p3);*/
//3.隐式转换法
person p4 = 10;//相当于person p4=person(10);有参构造的调用
person p5 = p4;//拷贝构造
}
int main()
{
test02();
system("pause");
return 0;
}