C++的封装
2015-12-11 00:05
183 查看
1、类中有三种不同权限标识符:public 公有, protected 保护 , private 私有 。还有破坏封装性的 friend 。
2、在public中,类会自己生成构造函数,复制构造函数,析构函数,如果有虚函数,还会形成虚函数列表。
3、在建立对象的时候,可以使用堆(叫动态存储空间)实例化,也可以用栈(象什么局域变量就是用栈的)来实例化。
4、在C++中,封装为了保证数据的安全性,使用private,和protected来保证在继承关系中数据的储存,但是使用友元函数(可以写在类的任意位置,但是我们习惯将他写到最前面或最后面),友元类,破坏了类的封装性,在公有(public)继承中,子类的的public会继承父类的public,子类的protected会继承父类的protected,以保证数据的安全,在protected继承中,父类的public和protected的函数和数据都会继承到子类的protected中。
5、在关于public中函数的定义,可以在写到函数定义之后,也可以在整个类完成封装之后写到累的外面如同子函数一样,但是要注意格式:类名::函数名(参数类型 参数名,... ):参数名(初始化),.... { },这就完成了类外定义,当然可以没有初始化列表(即::参数名(初始化),....)
6、还可以在protected 和private 的中设置常 数据成员(就是用const来修饰的数据成员),但只能被常成员函数所赋值,如果初始化,就要用初始化列表来进行初始化。
7、可以设置静态数据成员来记录对象的个数(及用static 来修饰的数据成员)可以在一开始进行直接赋值,也可以在类外赋值。
8、在执行拷贝构造函数的时候一般情况可以用浅拷贝来进行,但是在数据成员中存在指针(或者有用堆子来储存数据的情况)的时候后就不可以用浅拷贝来完成(在数据进行销毁的时候会出现一块内存被俩个对象销毁了俩遍,这会使系统崩溃,可能导致电脑报废),这就要用到深拷贝,新建一个指针,重新申请一段内存来进行数据的拷贝(及深拷贝),将在堆中储存的数据挨个存储在新建立的对象中。
9、建立对象的时候可以用 :类名 对象名,来建立对象,也可以用 new 来建立对象,但注意用new来建立的对象指针不会分配存储空间,这与在堆中建立的对象有本质区别。
10、在成员函数中会有隐含的 this 指针,他方便我区分对象内的数据成员和在函数中传入的形参名。
2、在public中,类会自己生成构造函数,复制构造函数,析构函数,如果有虚函数,还会形成虚函数列表。
3、在建立对象的时候,可以使用堆(叫动态存储空间)实例化,也可以用栈(象什么局域变量就是用栈的)来实例化。
4、在C++中,封装为了保证数据的安全性,使用private,和protected来保证在继承关系中数据的储存,但是使用友元函数(可以写在类的任意位置,但是我们习惯将他写到最前面或最后面),友元类,破坏了类的封装性,在公有(public)继承中,子类的的public会继承父类的public,子类的protected会继承父类的protected,以保证数据的安全,在protected继承中,父类的public和protected的函数和数据都会继承到子类的protected中。
5、在关于public中函数的定义,可以在写到函数定义之后,也可以在整个类完成封装之后写到累的外面如同子函数一样,但是要注意格式:类名::函数名(参数类型 参数名,... ):参数名(初始化),.... { },这就完成了类外定义,当然可以没有初始化列表(即::参数名(初始化),....)
6、还可以在protected 和private 的中设置常 数据成员(就是用const来修饰的数据成员),但只能被常成员函数所赋值,如果初始化,就要用初始化列表来进行初始化。
7、可以设置静态数据成员来记录对象的个数(及用static 来修饰的数据成员)可以在一开始进行直接赋值,也可以在类外赋值。
8、在执行拷贝构造函数的时候一般情况可以用浅拷贝来进行,但是在数据成员中存在指针(或者有用堆子来储存数据的情况)的时候后就不可以用浅拷贝来完成(在数据进行销毁的时候会出现一块内存被俩个对象销毁了俩遍,这会使系统崩溃,可能导致电脑报废),这就要用到深拷贝,新建一个指针,重新申请一段内存来进行数据的拷贝(及深拷贝),将在堆中储存的数据挨个存储在新建立的对象中。
9、建立对象的时候可以用 :类名 对象名,来建立对象,也可以用 new 来建立对象,但注意用new来建立的对象指针不会分配存储空间,这与在堆中建立的对象有本质区别。
10、在成员函数中会有隐含的 this 指针,他方便我区分对象内的数据成员和在函数中传入的形参名。
相关文章推荐
- PAT乙级——1008 锤子剪刀布 (C/C++)
- 实战c++中的string系列--string的分割、替换(类似string.split或是explode())
- 【C语言】重定向和文件
- C++Windows下SQLite简单封装
- 实战c++中的string系列--string的分割、替换(类似string.split或是explode())
- leetcode笔记:Word Ladder
- LeetCode题解:Range Sum Query - Immutable(C++版)
- 折半查找算法的实现
- C语言之NULL说明
- C语言数据类型
- Effective C++ 读书笔记3
- [c++]杨辉三角
- 关于实现qsort函数,回调函数
- C++primer之格式控制.
- 关于理解数组与指针
- C++ 关联容器
- C++学习总结
- c语言指针之void
- C++顺序性容器、关联性容器与容器适配器
- 可变参数(C语言):stdarg.h