第三章 构造函数和析构函数
1.构造函数
❶.与类同名,无返回值
❷.一个类,可以有多个构造函数 (构造函数的重载)
❸.根据参数类型等的不同,自动调用相应的构造函数
#include <iostream>
using namespace std;
class A
{
private:
int x;int y;
public:
A() {x=0; y=10;}
A(int a) {x=a;y=10;}
A(int a, int b) { x=a; y=b;}
void disp() {cout<<"x="<<x<<" y="<<y<<endl; }
};
int main()
{
A a1, a2(5), a3(-5,-6);
a1.disp(); a2.disp(); a3.disp();
}
2.拷贝构造函数
❶.定义:用一个生成的对象来,初始化另一个同类的对象
❷.作用:变量的初始化-> int a=10; int b=a;
对象的初始化-> Point p1(10,20); Point p2=p1;
❸.格式:默认构造函数-> Point():x(0),y(0){}
带参构造函数-> Point(int a, int b):x(a),y(b){}
/拷贝构造函数-> Point(const Point &r):x(r.x),y(r.y){}
❹.浅拷贝:复制对象,但未复制资源内容
(2对象共用一块资源空间,容易被初始化对象修改资源)
深拷贝:开辟新内存,对象和资源一块复制
#include <iostream>
using namespace std;
class Copy
{
private:
int x; int y;
public:
Copy(int a,int b)
{
x=a; y=b;
cout<<"调用构造函数"<<endl;
}
Copy(const Copy &c)
{
x=c.x; y=c.y;
cout<<"调用拷贝构造函数"<<endl;
}
~Copy() { cout<<"调用析构函数"<<endl; }
void print(){ cout<<x<<":"<<y<< endl; }
};
int main()
{
Copy obj1(10,20); obj1.print();
Copy obj2(obj1); obj2.print();
}
3.析构函数
❶.~ + 类名
❷.无参数,无返回值,一类一个,不能重载
❸.先创建的对象后析构,后创建的对象先析构 (先进后出)