//23......对象的初始化和清理
//构造函数和析构 函数
//编译器自动调用,构造函数只会调用一次,不写的,提供空实现的,由编译器提供
//给对象成员属性赋值
//gouzao函数,没有返回值,函数名和类相同,可以有参数,因此可以重载
//析构函数没有返回值。有~,没有形参
//24...........
/*
构造函数的分类:有无参数;普通构造和拷贝构造(类型分类)
三种调用方式:括号法
*/
#include<iostream>
using namespace std;
//23 24
class Person{
public:
//1.1构造函数
Person(){
cout << "无参(默认)构造函数的调用" << endl;
}
Person(int a){
age =a;
cout << "有参构造函数的调用" << endl;
}
//上面的是普通构造,接下来是拷贝构造函数,拷贝个一模一样的,拷贝属性
Person(const Person &P){//对常量persdon的引用,防止对用于拷贝的变量的修改
age = P.age;
}
//1.2析构函数
~Person(){
cout << "析构函数的调用" << endl;
}
private:
int age;
};
void test(){//在zhai 区,不用的时候会自动销毁
//括号法
//注意事项,在调用默认构造函数时候,不要加小括号!!
//不要利用拷贝构造函数初始化匿名对象
Person P;//默认构造函数调用
Person P4(10);//有参数的调用
Person P5(P4);//使用括号法调用拷贝构造函数
//隐式转换调用法
Person p5 = 10;//== Person p5 = Person(10);
Person p6 = p5;
//显示法
Person p1;
Person p2 = Person(10);//有参数的,其实Person(10) 是一个匿名对象了,48执行完,就被销毁。
Person p3 = Person(p2);//拷贝函数的调用
//Person(p3)不允许,,,不要利用拷贝构造函数初始化匿名对象
}
int main(){
test();
Person P2;//按理说程序结束前不会调用P2的析构函数
system("pause");
return 0;
}
C++ Class 构造函数析构函数(五)
最新推荐文章于 2023-07-11 11:46:07 发布