C++学习笔记序列之对象和类
2011-08-05 17:39
288 查看
下面对C++的对象和类这一章做一个总结
1.什么是类?我们理解类,可以直接把它理解为一个工具,就是用户用来实现抽象转换为自定义类型的工具。
2.类实现抽象,封装,数据隐藏
抽象,一个类就是很多具有相同属性和方法的抽象;类实现封装表现在类的设计时把类的公有接口和实现细节分开;数据隐藏表现在实现的细节隐藏在似有部分中,当然,你也可以通过作用域让实现的细节不能改动数据成员,这样可以让用户不需要了解数据是如何表示的,只需要调用相关的接口既可以。
3.类和结构的区别:相信在很多地方可以看到这些讨论,到目前为止,我知道的区别是一句话:类的数据成员和函数默认是private,而结构式public,其他一样。
4.关于类的实例的内存分配解析
我们知道,定义了一个类,如果我们要定义一个累的实例,很简单:
上面这个很简单,相信大家都会,那么一个类的实例在内存中是怎么分配的呢?
首先,我们知道,定义一个类实例,在内存中会为每个实例分配一个地址联系的空间,但是我们知道Stock stk;只是创建了类的数据成员大小空间的内存,而成员函数却没有为每个实例复制一个副本,而是所有的类实例共用类的成员函数。
举个例子:定义两个类的实例
Stock stk1; Stock stk2;
则内存分配给stk1; stk2每个实例一个单独的数据成员空间,但是stk1.show()和stk2.show()调用的是同一个地址的函数,只不过他们修改的数据成员不一样。
5.类的两个特殊的函数:构造函数和虚构函数
我们知道,定义一个变量,很简单,int a,其实这里面做了一些我们不知道的工作,int其实是一个类,其实这里就是定义了一个int类的实例;我们也很清楚的知道,a在内存中占四个字节,但是怎么分配的呢?
这里我们谈到构造函数,就很好理解啦,其实这是系统做的事情,声明一个变量,会调用该类的构造函数为变量分配空间,具体是怎么分配,int类里面的数据成员是什么东东,我就没有深究啦。。。。。。。。
既然C++里面支持重构,那么就可以定义多个构造函数,定义有参数的,无参数的,有一点要注意的是:如果用户没定义任何相关的构造函数,那么系统会给类默认分配一个跟类名称相同的构造函数。
讲了构造函数,现在来讲讲虚构函数:
虚构函数是跟构造函数相对立的,构造函数用来分配空间,那么虚构函数就是用来回收空间的,但是虚构函数不重载,没有分有参数和无参数的虚构函数,而且一个类只能有一个虚构函数,它的名字是:~类名()
虚构函数回收空间就是回收构造函数为实例分配的数据成员和成员函数所占用的空间,而且虚构函数一般是由编译器来做的,不需要用户手动调用类的虚构函数。
6.const成员函数
有一种情况,既然C++支持数据封装,那么很可能在调用成员函数的时候不经意间修改的数据,既然这样那么有什么办法可以防止修改呢?这个时候,const成员函数就派上了用场啦,以下是const成员函数的定义:
如果你尝试定义一个stock stk;然后调用stk.show();编译器就会报错,因为你尝试修改了数据成员a的值。
1.什么是类?我们理解类,可以直接把它理解为一个工具,就是用户用来实现抽象转换为自定义类型的工具。
2.类实现抽象,封装,数据隐藏
抽象,一个类就是很多具有相同属性和方法的抽象;类实现封装表现在类的设计时把类的公有接口和实现细节分开;数据隐藏表现在实现的细节隐藏在似有部分中,当然,你也可以通过作用域让实现的细节不能改动数据成员,这样可以让用户不需要了解数据是如何表示的,只需要调用相关的接口既可以。
3.类和结构的区别:相信在很多地方可以看到这些讨论,到目前为止,我知道的区别是一句话:类的数据成员和函数默认是private,而结构式public,其他一样。
4.关于类的实例的内存分配解析
我们知道,定义了一个类,如果我们要定义一个累的实例,很简单:
Class stock { Private: Int a; Public: Void show(); } Int mian() { Stock stk; } |
首先,我们知道,定义一个类实例,在内存中会为每个实例分配一个地址联系的空间,但是我们知道Stock stk;只是创建了类的数据成员大小空间的内存,而成员函数却没有为每个实例复制一个副本,而是所有的类实例共用类的成员函数。
举个例子:定义两个类的实例
Stock stk1; Stock stk2;
则内存分配给stk1; stk2每个实例一个单独的数据成员空间,但是stk1.show()和stk2.show()调用的是同一个地址的函数,只不过他们修改的数据成员不一样。
5.类的两个特殊的函数:构造函数和虚构函数
我们知道,定义一个变量,很简单,int a,其实这里面做了一些我们不知道的工作,int其实是一个类,其实这里就是定义了一个int类的实例;我们也很清楚的知道,a在内存中占四个字节,但是怎么分配的呢?
这里我们谈到构造函数,就很好理解啦,其实这是系统做的事情,声明一个变量,会调用该类的构造函数为变量分配空间,具体是怎么分配,int类里面的数据成员是什么东东,我就没有深究啦。。。。。。。。
既然C++里面支持重构,那么就可以定义多个构造函数,定义有参数的,无参数的,有一点要注意的是:如果用户没定义任何相关的构造函数,那么系统会给类默认分配一个跟类名称相同的构造函数。
讲了构造函数,现在来讲讲虚构函数:
虚构函数是跟构造函数相对立的,构造函数用来分配空间,那么虚构函数就是用来回收空间的,但是虚构函数不重载,没有分有参数和无参数的虚构函数,而且一个类只能有一个虚构函数,它的名字是:~类名()
虚构函数回收空间就是回收构造函数为实例分配的数据成员和成员函数所占用的空间,而且虚构函数一般是由编译器来做的,不需要用户手动调用类的虚构函数。
6.const成员函数
有一种情况,既然C++支持数据封装,那么很可能在调用成员函数的时候不经意间修改的数据,既然这样那么有什么办法可以防止修改呢?这个时候,const成员函数就派上了用场啦,以下是const成员函数的定义:
Class stock { Private: Int a; Public: Void show() const;//在函数的后面加上一个const就表示这个函数是const成员函数,不能对类的数据成员a进行修改。 } Void Stock::show() { A=9; } Int mian() { Stock stk; } |
相关文章推荐
- C++的学习笔记(第七章:类与对象)
- C++学习笔记(13)——利用对象、引用、指针调用虚函数
- C++学习笔记(13)——利用对象、引用、指针调用虚函数
- Inside The C++ Object Model 学习笔记 -- 关于对象
- C++ STL 学习笔记 函数对象
- JNI学习笔记 C++传递结构体、String、数组对象给JavaC++传递结构体、String、数组对象给Java
- c++入门学习笔记--类和对象
- C++学习笔记序列之面试题目
- C++学习笔记--对象创建
- C++学习笔记(六)-- 类和对象 构造函数和析构函数 const成员函数 this指针 对象数组 堆栈管理变量
- Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化
- C++学习笔记三:类和对象
- C++ 学习笔记(15)面向对象程序设计(类、继承、虚函数、抽象类、using命令、容器与继承)
- C++学习笔记(1)——基类、派生类的对象空间
- C++ 中的成员对象(学习笔记)
- C++学习笔记 lesson2 类和对象
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
- C++学习笔记-深入类与对象
- Inside The C++ Object Model 学习笔记 -- 关于对象
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记