C/C++培训
达内IT学院
400-996-5531
封装、构造函数、析构函数
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";
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved