一、c++封装特性
从struct说起
当单一变量无法完成描述需求的时候,结构体类型解决了这一问题。可以将多个类型打
包成一体,形成新的类型。这是 c 语言中封装的概念。但是,新类型并不包含,对数据类的操作。所的有操作都
是通过函数的方式,去其进行封装。
封装,可以达到,对外提供接口,屏蔽数据,对内开放数据。
比如我们用 struct 封装的类,即知其接口,又可以直接访问其内部数据,这样却没有达
到信息隐蔽的功效。而 class 则提供了这样的功能,屏蔽内部数据,对外开放接口。
struct 中所有行为和属性都是 public 的(默认)。C++中的 class 可以指定行为和属性的
访问方式,默认为 pirvate。
访问属性 属性 对象内部 对象外部
public 公有 可访问 可访问
protected 保护 可访问 不可访问
private 私有 可访问 不可访问
二、构造器和析构器
构造器(Constructor)
定义及意义
class 类名
{
类名(形式参数)
构造体
}
class A
{
A(
形参)
{}
}
在类对象创建时,自动调用,完成类对象的初始化。尤其是动态堆内存的申请。
规则:
1 在对象创建时自动调用,完成初始化相关工作。
2 无返回值,与类名同,
3 可以重载,可默认参数。
4 默认无参空体,一经实现,默认不复存在。
参数初始化表
Stack::Stack(int size)
:space(new int[size]),top(0)
{}
下面代码中有错误吗? 有
#include
#include
using namespace std;
class A
{
public:
A(char * ps)
:name(ps),len(strlen(name.c_str())){}
void dis()
{
cout<<len<<endl;
}
private:
int len;
string name;
};
int main()
{
A a("china");
a.dis();
return 0;
}
结论:
1,此格式只能用于类的构造函数。
2,初始化列表中的初始化顺序,与声明顺序有关,与前后赋值顺序无关。
3,必须用此格式来初始化非静态 const 数据成员(c++98)。
4,必须用此格式来实始化引用数据。
析造器(Destructor)
对象销毁时期
1,栈对象离开其作用域。
2,堆对象被手动 delete.
4.3.2.析构器的定义及意义
class 类名
{
~
类名()
析造体
}
class A
{
~A()
{}
}
在类对像销毁时,自动调用,完成对象的销毁。尤其是类中己申请的堆内存的释放.
规则:
1 对象销毁时,自动调用。完成销毁的善后工作。
2 无返值,与类名同,无参。不可以重载与默认参数。
3 系统提供默认空析构器,一经实现,不复存在。
Stack::~Stack()
{
delete []space;
}
网友评论