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 ...
随机推荐
- Java Access Levels(访问控制)
Access Levels Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y ...
- 设置MATLAB中figure的背景为白色
matlab的图形窗口每次背景都是灰色的,而我希望每次都是白色的背景,方便用图: 每次总是需要添加figure('color','w');或者figure('color',[1 1 1])或者set( ...
- 关于打开Eclipse时出现eclipse failed to create the java virtual machine与locking is not possible in the direc
原文转自:http://www.cnblogs.com/steararre/p/4037453.html 今天在机子上使用Eclipse时候打开发现这两个问题,通过查阅资料膜拜大神博客得知解决方法,特 ...
- java_抽象类应用
本例子通过一个实例来具体阐述抽象类的应用,首先一个抽象类Person2,里面定义了一些人的共有属性(年龄,姓名),和抽象方法want(),want()方法来具体实现不同的人的需求(学生想要成绩,工人想 ...
- HTML--控制小人自由移动
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- JMeter脚本参数化和断言设置( CSV Data Set Config )
用Badboy录制了Jmeter的脚本,用Jmeter打开后形成了原始的脚本.但是在实际应用中,为了增强脚本的多样性,就要使脚本参数化.这里我以登录为例,参数化用户账号与用户密码. 图1 :原始脚本 ...
- VMware SphereESXi上安装虚拟机
VMware SphereESXi上安装虚拟机 创建新虚拟机 此处以CentOS为例 注意:配置上传的系统文件位置及启动项
- 文本输入框的两种div+css的写法
1.扁平化的设计风格.--淘宝 直接使用input.对其设置height.padding.使鼠标居中又不会占满输入框. 2.背景是图片的设计.--百度 试用span将input包裹 ...
- JS属性读写操作+if判断注意事项
js中不允许出现“ - ” 页面中改变文字大小-案例: <!doctype html> <html lang="en"> <head> < ...
- hashtable 和dictionary
hashtable 通过 key 和value 进行访问 不是 通过 索引访问 对类型没有强制规定 ,所以类型危险 容易出错 无效的key时 会返回空 dictionary 与hashtable 相区 ...