c++对象的构造和析构

3对象的构造和析构

前言

创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。注意,类的数据成员是不能在声明类时初始化的。

为了解决这个问题,C++编译器提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。

3.1构造和析构函数

1构造函数和析构函数的概念

有关构造函数

1构造函数定义及调用

1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数;

2)构造函数在定义时可以有参数;

3)没有任何返回类型的声明。

2构造函数的调用

自动调用:一般情况下C++编译器会自动调用构造函数

手动调用:在一些情况下则需要手工调用构造函数

 

有关析构函数

3)析构函数定义及调用

1)C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数

语法:~ClassName()

2)析构函数没有参数也没有任何返回类型的声明

3)析构函数在对象销毁时自动被调用

4)析构函数调用机制

C++编译器自动调用

代码演示:dm01_构造函数的基础.cpp

2 C++编译器构造析构方案 PK 对象显示初始化方案

设计构造函数和析构函数的原因 

面向对象的思想是从生活中来,手机、车出厂时,是一样的。

生活中存在的对象都是被初始化后才上市的;初始状态是对象普遍存在的一个状态的

普通方案:

为每个类都提供一个public的initialize函数;

对象创建后立即调用initialize函数进行初始化。

优缺点分析

1)initialize只是一个普通的函数,必须显示的调用

2)一旦由于失误的原因,对象没有初始化,那么结果将是不确定的

没有初始化的对象,其内部成员变量的值是不定的

3)不能完全解决问题

//为什么对象需要初始化 有什么样的初始化方案

#include "iostream"

using namespace std;

 

/*

思考为什么需要初始化

面向对象思想来自生活,手机、车、电子产品,出厂时有初始化

怎么样进行初始化?

 

方案1:显示调用方法

缺点:易忘、麻烦;显示调用init,不能完全解决问题

*/

class Test21

{

public:

int m;

int getM() const { return m; }

void setM(int val) { m = val; }

 

int n;

int getN() const { return n; }

void setN(int val) { n = val; }

 

public:

int init(int m,int n)

{

this->m = m;

this->n = n;

return 0;

}

protected:

private:

};

 

int main()

{

int rv =0;

Test21 t1;  //无参构造函数的调用方法

Test21 t2;

 

//t1.init(100, 200);

//t2.init(300, 400);

cout<<t1.getM()<<" "<<t1.getN()<<endl;

cout<<t2.getM()<<" "<<t2.getN()<<endl;

 

//定义对象数组时,没有机会进行显示初始化

Test21 arr[3];

//Test arr_2[3] = {Test(1,3), Test(), Test()};

 

system("pause");

return rv;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值