c++:构造与析构

/*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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值