个人理解:
括号法:值传递
显示法:常规赋值
隐式转换法:简洁版
#include<iostream>
#include<string>
using namespace std;
//1构造函数的分类以及调用
//分类
//按照参数分类无参构造(默认构造) 有参构造
//按照类型分类普通构造拷贝构造
class Person
{
public:
//构造函数
Person()
{
cout << "Person 无参构造函数的调用" << endl;
}
Person(int a)
{
age = a;
cout << "Person 有参构造函数的调用" << endl;
}
//拷贝构造函数(其实就是复制一份)
Person(const Person &p)//const锁死,避免变动
{
//将传入的人身上所有属性,拷贝到我身上
cout << "Person 拷贝构造函数调用" << endl;
age = p.age;
}
~Person()
{
cout << "Person 的析构函数调用" << endl;
}
int age;
};
//调用
void test01()
{
//1、括号法常用
//Person p;//默认构造函数调用
//Person p2(10);//有参构造函数
//Person p3(p2);//拷贝构造函数
/*注意事项
调用默认构造函数时候,不要加()
因为下面这行代码,编译器会认为是一个函数的声明,不会认为在创建对象*/
//Person p1();
//cout << "P2的年龄为:" << p2.age << endl;
//cout << "P3的年龄为:" << p3.age << endl;
//2、显示法
//Person p1;
//Person p2 = Person(10);//有参构造
//Person p3 = Person(p2);//拷贝构造
//Person(10);//匿名对象特点:当前行执行结束后,系统会立即回收掉匿名对象
//cout << "aaaaa" << endl;
//注意事项2
//不要利用拷贝构造函数 初始化匿名对象 编译器会认为 Persin(p3); 对象声明
//Person(p3);
//3、隐式转换法
Person p4 = 10;//相当于 写了 Person p4 =Person(10); 有参构造
Person p5 = p4;//拷贝构造
}
int main()
{
test01();
system("pause");
return 0;
}
评论前必须登录!
注册