类名(){}
1.构造函数没有返回值也不写void
2.函数名称与类名相同
3.构造函数可以有参数,因此金额已发生重载
4.程序在调用对象时候会自动调用构造,无需手动调用,而且只会调用一次
析构函数语法 ~类名(){}
1.析构函数,没有返回值也不写void
2.函数名称与类名相同,在名称前加上~
3.析构函数不可以有参数,因此不可以发生重载。
4.程序在对象销毁前会自动调用析构,无需手动调用,而且只会调用一次
#include<iostream>
using namespace std;
class person {
public:
person() {
cout << "构造函数的调用" << endl;
}
};
void test01() {
person p;//建个对象
}
int main(){
test01();////运行之后程序会自动调用构造函数
return 0;
}
构造函数的分类及调用
两种分类方式:按参数分为:有参构造和无参构造
按类型分为:普通构造和拷贝构造
三种调用方式:
括号法 注意,调用默认构造函数时不要加()直接person p1; person p2(10);person p3(p2)
显示法 person p1; person p2=person(10) ; person p3=person(p2); 等号右侧叫匿名对象,当前行执行后,系统会立即回收匿名对象
注意:不要利用拷贝函数初始化匿名对象,编译器会认为这是对象声明person(p3)编译器会把小括号去掉 person p3该对象已经存在
隐式转换法
person p4=10;//相当于 person p4=person(10)
person p5=p4
#include<iostream>
using namespace std;
class person {
private: int age;
public:
person() {
cout << "无参构造函数的调用(默认)" << endl;
}
person(int a){
age=a;
cout << "有参构造函数的调用" << endl;
}
//拷贝构造函数
person(const person &p){
cout << "拷贝构造函数的调用" << endl;
age=p.age;
}
~person(){
cout<<"析构函数的调用"<<endl;
}
};
void test01() {//括号法,显示法,隐式转换
person p1;
//建个对象 (在栈上的数据,在test01执行完毕后,释放这个对象)
person p2(10);//(有参构造函数)
person p3(p2);
}
int main(){
test01();////运行之后程序会自动调用构造函数
system("pause");
return 0;
}