是我自己的学习笔记,记录下来主要想看的是注释 代码可以忽略 欢迎大家指正
两种分类方式:
按参数分类:有参、无参构造
按类型分类:普通构造和拷贝构造
三种调用方式:
括号法 显示法 隐式转换法
#include<iostream>
#include<string>
#include<Ctime>
using namespace std;
//对象的初始化和清理
//1.构造函数 进行初始化操作
class person
{
//1、构造函数
//没有返回值 不用写void
//函数名与类型名相同
//构造函数可以有参数,可以发生重载
//创建对象的时候,构造函数会自动调用,而且只调用一次
public:
//构造函数
person()
{
cout << "person的无参构造函数的调用" << endl;
}
person(int a)
{
age = a;
cout << "person的有参构造函数的调用" << endl;
}
//拷贝构造函数
person(const person &p)//拷贝过程中要加const变为只读状态 还要使用引用的方式接收实参
{
//将传入的人身上的所有属性 拷贝到我身上
age = p.age;
}
int age;
//2、析构函数 进行清理的操作
//没有返回值 不写void
//函数名和类名相同 在名称之前要加~符号
// 析构函数不可以有参数,不可以发生重载
// 对象在销毁前会自动调用析构函数而且只会调用一次
~person()
{
cout << "person的析构函数" << endl;
}
};
//构造和析构都是必须有的实现,如果我们自己不过构造,编译器会提供一个空实现的构造
void test01()
{
//1、括号法
//person p;//默认构造函数的调用
//person p2(10);//会调用有参构造函数
//person p3(p2);//拷贝构造函数
//cout << "p2的年龄: "<< p2.age << endl;
//cout << "p3的年龄: " << p3.age << endl;
//注意事项 调用默认构造函数的时候 ,不要加() 不然编译器会认为这是一个函数的声明 不会认为在创建对象
//2、显示法
person p1;
person p2 = person(10);//有参构造 person(10)匿名对象 特点:当执行结束后,系统会立即回收掉匿名对象
person p3 = person(p2);//拷贝构造
//注意事项2 不要利用拷贝函数 初始化匿名对象 编译器会认为 person(p3)===person p3; 对象的声明
//3、隐式转换法
person p4 = 10; //相当于写了 person p4=person(10)
person p5 = p4;
}
int main()
{
test01();
system("pause");//按任意键继续
return 0;//关闭程序
}