更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C++封装、构造函数、析构函数知识点解析

  • 发布:C++培训
  • 来源:资料库
  • 时间:2017-07-17 14:03

封装、构造函数、析构函数

1 封装


①具体一点,封装是将数据和行为结合在一个包中,对对象的使用者隐藏数据的实现方式。

②实现封装的关键:不能让类中的方法直接访问其他类的内部数据,只能通过公开行为方法来间接访问。

其实在上一节中已经提到过封装的概念了。

将数据成员和成员函数包装进类中,加上具体实现的隐藏,共同被称作封装,其结果是一个同时带有特征和行为的数据类型。

信息隐藏是OOP最重要的功能之一,也是使用访问修饰符的原因。

信息隐藏的原因包括:

①对模块的人和实现细节所作的更改不会影响使用该模块的代码

②防止用户意外修改数据

③使模块易于使用和维护

2 构造函数

1、对象初始化

所有的变量都有一个初始状态,对象的初始值由构造函数决定。

建立对象的同时,自动会调用构造函数。

2、构造函数的基本语法

构造函数和类名相同,没有返回值

3、构造函数的初始化列表

一般使用初始化列表对数据成员进行初始化

4、构造函数的重载

一个类可以有多个构造函数

5、默认构造函数

不需要参数可以构造对象的函数叫做默认构造函数

首先建立一个类

class car

{

public:

//属性初始化

car()

{

cout<<”car constructor”<<endl;

price=1;

weight=1;

sudu=0;

}

private:

int price;

int weight;

int sudu;

};

int main()

{

car Car;

cout<<Car.price<<" "<<Car.weight<<" "<<Car.sudu<<endl;

return 0;

}

如下 在用car类 定义一个对象Car时,会自动调用构造函数car()。

运行结:

car constructor

1 1 0

3 析构函数

1、对象的销毁

在程序运行中,所有变量都要在合适的时机将对象销毁,否则会影响程序性能

2、析构函数的基本概念

析构函数负责回收对象资源

3、析构函数的语法

析构函数和类名相同,在前面加上"~"

构造函数是定义一个对象的时候调用的,那么析构函数在什么时候调用的呢?

首先建立一个类

class car

{

public:

//属性初始化

car()

{

cout<<" car constructor"<<endl;

}

~car()

{

cout<<" car destructor"<<endl;

}

private:

int price;

int weight;

int sudu;

};

当主函数为:

int main()

{

car Car;

cout<<"main will be end"<<endl;

return 0;

}

运行结果:

car constructor

main will be end

car destructor

当主函数为:

int main()

{

{

car Car;

}

cout<<"main will be end"<<endl;

return 0;

}

运行结果:

car constructor

当主函数为:

int main()

{

car Car;

cout<<"main will be end"<<endl;

return 0;

}

运行结果:

car constructor

car destructor

main will be end

仔细观察为什么结果不同,可以初步对比出析构函数的调用时机。对象的生命周期是从对它定义的时候开始,到它遇到第一个花括号结束,当对象的生命周期结束时,将调用析构函数。

注意:

①如果一个类没有专门定义构造函数,那么C++就仅仅创建对象而不做任何初始化

②如果类没有自定义析构函数,则编译器提供一个默认的析构函数

上期每次一练答案:

#include <stdio.h>

#include <string.h>

int main( )

{

char a[10] = "abc" ,b[10] = "012",c[10] = "xyz";

strcpy( a+1,b+2);

puts( strcat( a,c+1));

return 0;

}

输出结果为:a2yz

解析:

C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间。。

从a[1]的地址开始,把b[2]开始的字符复制到a[1],当然字符串结束标志也复制过去了。此时a[10] = "a2\0";

strcat( a,c+1);这个就简单多了。把c[1]开始的字符串接过去到a的屁股后面。。a[10]="a2yz\0";

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C语言如何精简代码,C语言精简代码教程
下一篇:C语言指针专题——指针怎么就很灵活?

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省