/*c++中还提供了一些封装方法:构造方法、析构方法
一、在声明一个类的对象后,要对该对象进行初始化,即对对象中的数据成员赋值
构造函数:用于创建一个对象,提供初始化该对象的简单手段
函数语法:(构造函数的函数名必须与类名相同;它没有返回值;作用为初始化对象;其调用是在声明对象时候自动调用(python中的__init__))
<类名> (<参数表>){
<函数体>
}
二、
如果一个类声明了5个对象,其对象的内存分配是怎么样的呢?
答:实际上5个对象的数据成员分配了不同的存储空间,而5个对象的函数成员共用一个存储空间。
析构函数:在对象被撤销时执行的,用完成对象被撤销前的清理工作,如动态申请的内存空间等等
也可以用来执行用户希望在最后一次使用对象后执行的相关操作,如输出某些信息
析构函数的语法格式:
~<类名>(){
<函数体>
}
析构函数不返回任何值,不带任何参数,由系统自动调用
*/
#include<iostream>
using namespace std;
class Date {
int year;
int month;
int day;
public:
Date(int x = 1998, int y = 8, int z = 25) { //构造函数,如果用户不定义构造函数,则系统会自动定义一个缺省的
year = x;
month = y;
day = z;
}
void now();
~Date(); //析构函数
};
void Date:: now() {
cout << year + 20 << " " << month + 1 << " " << day + 5 << endl;
}
Date::~Date() {
cout << "正在调用析构函数" << endl; //在主程序中不用调用,他在程序执行完后由系统自动调用。(python中的__init__)
}
class V {
int len;
int wit;
int hei;
public:
V(); //无参数的构造函数
V(int x, int y, int z); //构造函数的重载。(有参数的构造函数
int vol();
};
V::V() {
len = 5;
wit = 5;
hei = 5;
cout << "正在调用构造函数1" << endl;
}
V::V(int x, int y, int z) :len(x), wit(y), hei(z) {//通过初始化列表赋值
cout << "正在调用构造函数2" << endl;
}
int V::vol() {
return len * wit* hei;
}
int main() {
Date dateactual; //声明对象dateactual,此时自动调用了构造函数,并赋予了初值,int x = 1998, int y = 8, int z = 25
dateactual.now(); //输出2018 9 30
system("pause"); //按回车键继续执行
Date date2(1949, 10, 1); // //声明对象date2,此时自动调用了构造函数,并赋予了初值,1949, 10, 1。类似与python中的__init__
date2.now();//输出1969 11 6
V v1;
cout<<v1.vol()<<endl;
V v2(18, 17, 16);
cout << v2.vol() << endl;
return 0;
}
c++:构造与析构
最新推荐文章于 2023-02-04 17:26:22 发布