构造函数和析构函数
类名(){}
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;
} 
                    
                
                
            
        
浙公网安备 33010602011771号