美文网首页c++
c++学习笔记第三天

c++学习笔记第三天

作者: 我就是一个垃圾 | 来源:发表于2019-02-14 15:41 被阅读1次

一、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;

}

相关文章

网友评论

    本文标题:c++学习笔记第三天

    本文链接:https://www.haomeiwen.com/subject/jarseqtx.html