c++ 06
一、下标操作符
A a (...);
cout << a[3] << endl;
cout << a.operator[] (3) << endl;
cout << a["张飞"] << endl;
cout << a.operator[] ("张飞") << endl;
二、函数运算符
如果为一个类定义了形如“operator()”的运算符,那么该类的对象就可以当做函数用,该函数的参数表和返回类型就是operator()运算符函数的的参数表和返回类型。
三、解引用(*)和间接访问(->)运算符
class PA {
public:
PA (A* pa) : m_pa (pa) {}
~PA (void) { delete m_pa; }
private:
A* m_pa;
};
void foo (void) {
PA pa (new A (...));
...
}
智能指针:auto_ptr
四、类型转换运算符
五、new/delete运算符
六、不能重载的运算符
:: - 作用域限定
. - 直接成员访问
.* - 成员指针直接解引用
?: - 三目
sizeof - 字节数,sizeof (a = 5)
typeid - 类型信息
七、继承的基本概念和语法
人类:姓名、吃饭
学生是人:学号、学习
教师是人:工资、授课
人类 - 基类(父类)- 姓名、吃饭
/ \ 继承 ^V 派生
学生 教师 - 子类(派生类)
| |
学号、学习 工资、授课
继承表语法:
class 子类 : 继承方式1 基类1, 继承方式2 基类2, ... { ... };
继承方式:公有(public)、私有(private)、保护(protected)
八、继承的基本性质
1.基类中的一切都为子类所继承,就如同是子类的一样。
2.基类的私有部分虽然存在于子类中,但不能为子类直接访问。基类的保护部分可以为子类直接访问。
3.任何时候将子类对象的地址赋值给基类类型的指针都是安全的,反之存在风险。
九、继承方式对访控属性的影响
1.访控属性
访控属性 访控属性 基类 子类 外部 友元
限定符
public 公有 OK OK OK OK
protected 保护 OK OK NO OK
private 私有 OK NO NO OK
2.继承方式
当试图通过一个子类对象访问该对象从其基类继承的成员时,才需要考虑继承方式对访控属性的影响。
A->B->C
B中访问A的成员:不需要考虑B从A的继承方式
C中访问A的成员:需要考虑B从A的继承方式
main中
B b;
通过b访问A的成员:需要考虑B从A的继承方式
基类中的 公有子类 保护子类 私有子类
----------------------------------
公有成员 公有成员 保护成员 私有成员
保护成员 保护成员 保护成员 私有成员
私有成员 私有成员 私有成员 私有成员
表示IsA的关系,一般使用公有继承。
学生是人
教师是人
私用继承,实现继承,仅仅将基类作为子类的实现工具,同时又不希望基类的公有接口通过子类被扩散。保护继承允许基类的公有接口在子类中扩散,但是不能对外部扩散。
class DCT {
public:
void codec (void) { ... };
};
class Jpeg : protected DCT {
public:
void render (void) {
...
m_dct.codec ();
...
}
protected;
DCT m_dct;
};
class Jpeg2000 : public Jpeg {
public:
void render (void) {
...
codec ();
...
}
};
Jpeg jpeg;
jpeg.code (); // ERROR !
十、子类的构造和析构
1.如果在子类的构造函数的初始化表中没有显式地指明基类部分如何初始化,那么系统就以以无参的方式初始化子类对象中的基类子对象,前提是基类类型支持无参构造。否则,就根据所指定的构造函数和参数对基类部分进行初始化。
2.构造和析构顺序
构造:基类->成员->子类
析构:子类->成员->基类
如果有多个成员,则按照其在类中被声明的顺序依次构造,如果有多个基类,则按照继承表的顺序依次构造,析构的顺序与构造严格相反。
3.子类的析构函数(无论自定义还是缺省),都会自动调用基类的析构函数,但是基类的析构函数不会调用子类的析构函数。因此,delete一个指向子类对象的基类指针,将可能引发内存泄漏。
十一、子类的拷贝构造和拷贝赋值
子类的拷贝构造和拷贝赋值需要兼顾子类对象中基类子对象的拷贝,否则该子对象将被已无参方式构造,或者无法得到拷贝源的内容。
十二、名字隐藏
在子类中可以定义和基类同名的标识符,将后者隐藏起来。可以通过作用域限定解隐藏。
c++ 06的更多相关文章
- 《HelloGitHub月刊》第06期
前言 <HelloGitHub>月刊做到第06期了(已经做了6个月了),在GitHub上获得了100+的stars,虽然不多,但是我很知足了,说明有人觉得这个项目是有价值的.同时园子中的' ...
- iOS系列 基础篇 06 标签和按钮 (Label & Button)
iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- 异步编程系列06章 以Task为基础的异步模式(TAP)
p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...
- javascript基础06
javascript基础06 splice var del_arr = del.splice(0,2); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返 ...
- Linux 第06天
Linux 第06天 1.SAMBA服务器————(linux和windows的文件共享) 1.1 安装 yum install samba -yum 1.2 配置文件 /etc/samba/smb. ...
- plsql11.06注册码
plsql11.06注册码:Product Code(产品编号):4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number(序列号):601769password ...
- shell脚本中的几个括号总结(小括号/大括号/花括号)--from:http://www.cnblogs.com/hanyan225/archive/2011/10/06/2199652.html
在Shell中的小括号,大括号结构和有括号的变量,命令的用法如下: 1.${var}2.$(cmd)3.()和{}4.${var:-string},${var:+string},${var:=stri ...
- VMware10.06精简版安装后台运行
VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
随机推荐
- (Data structure)Implement Trie && Add and Search Word
Implement Trie (Prefix Tree) Implement a trie with insert, search, and startsWith methods. Note:You ...
- python部落刷题宝学到的内置函数
最近加入了python部落,感觉里面的刷题宝很有意思,玩了一下,知道了许多以前并不清楚的内置函数,然后感觉到快要记不住了,所以开始陈列一下 1.divmod(a,b):取a除以b的商和余数,功效等价于 ...
- Linux中open函数以及退出进程的函数
open函数的flag详解1 读写权限:O_RDONLY O_WRONLY O_RDWR (1)linux中文件有读写权限,我们在open打开文件时也可以附带一定的权限说明 (譬如O_RDONLY就表 ...
- MyBatis魔法堂:Insert操作详解
一.前言 数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解 其属性如下: parameterType:入参的全限 ...
- 在Servlet中使用spring注入的bean
package abu.csdn.servlet; import java.io.IOException; import javax.servlet.ServletContext; ...
- Android--获取当前系统的语言环境
private boolean isZh() { Locale locale = getResources().getConfiguration().locale; St ...
- Java第四周学习日记
Day01 双列集合: 在现实生活中有些数据是以映射关系存在的,也就是成对存在的,比如夫妻等.单例集合无法表现出映射关系,所以学习双列集合. 双列集合无迭代器. 1.Map 双列集合: ——————— ...
- Some good iOS questions
这里,我列举了一些在Stackoverflow中一些比较好的关于iOS的问题.大部分我列举的问题都是关于Objective C.所有问题中,我比较喜欢“为什么”这一类型的问题. 问题 1. What’ ...
- CodeSmith使用总结--调用自定义方法
上一篇读取了一个表的内容,但是到了真正应用的时候还是不够用的,我们很容易可以对比出来,SQL里边的数据类型的定义和C#中有所不同,比如Saler--String,大写的String在C#中不是一个类型 ...
- css设置滚动条颜色与样式以及如何去掉与隐藏滚动条
我们大家在浏览网页的时偶尔会看到很漂亮的各种颜色样式的滚动条,这就是通过css代码控制来实现的,于是本人搜集整理一番,这里和大家分享一下使用CSS设置滚动条颜色以及如何去掉滚动条的方法,需要的朋友可以 ...