C++_基础_运算符重载2
内容:
(1)只能用成员形式重载的运算符
(2)new/delete操作符的重载
(3)封装和继承的初识
(4)继承的特性
(5)子类及其函数的特性
(6)多重继承和虚继承
1.只能用成员形式重载的运算符
(1)[] 下标操作符
(2)() 函数操作符
(3)* -> 间接操作符
2.new/delete操作符的重载
注意:
如果需要在调用构造函数之前做一些初始化工作/在调用析构函数之后做一些善后工作,则可以通过new/delete运算符重载的函数来实现
3.封装和继承的初识
3.1 概念
(1)封装
使用访问控制符对类型中的属性和行为进行访问限制的机制
public protected private
(2)继承
表达类型之间共性和特性的依存关系的一种语言机制
如:
学生类:
属性:姓名 年龄 学号
行为:吃饭 学习
教师类:
属性:姓名 年龄 职称
行为:吃饭 授课
将学生类和教师类的共性提取出来,组成人类:
属性:姓名 年龄
行为:吃饭
剩下的是学生类和教师类的特性:
学生类:
属性:学号
行为:学习
教师类:
属性:职称
行为:授课
于是发现:
人类:(姓名,年龄,吃饭)
/ \
(学号,学习)学生类 教师类(职称,授课)
人类:父类/基类
学生类/教师类:子类/派生类
3.2 继承的语法格式
class 子类名 : 继承方式 父类名1,继承方式2 父类名2,...
{
子类类型的定义;
};
继承方式:
public: 公有方式继承
protected:保护方式继承
private: 私有方式继承
练习:
vi 07inherit.cpp文件,自定义Person类和Teacher类,提供构造函数和行为
4.继承的特性
(1)一个子类类型的对象在任何时候都可以看做该类的基类类型的对象
(2)一个基类类型的对象如果作为子类类型的对象被访问,有可能引发非法内存访问错误
(3)在子类中可以访问基类中的公有和保护成员,但是不可以访问私有成员
(4)在子类中可以定义和基类中同名的标示符,子类隐藏父类(名字隐藏)
5.继承方式和访问控制符
5.1 访问控制符
访控符 访控属性 本类 子类 类外 友元
---------------------------------
public 公有的 ok ok ok ok
protected 保护的 ok ok no ok
private 私有的 ok no no ok
5.2 继承方式的特性
基类中 公有子类 保护子类 私有子类
----------------------------------
公有的 公有的 保护的 私有的
保护的 保护的 保护的 私有的
私有的 私有的 私有的 私有的
注意:
一般采用公有方式继承,保护和私有的继承方式很少使用
如:
class A
{
public:
void print(void){....}
};
class B : private A
{
public:
void show(void)
{
print();
...
}
};
class C
{
print();
};
6.子类中的构造函数和析构函数
(1)在子类的构造函数中可以显式地构造其基类部分("基类类名(实参)"),否则系统会试图以无参的形式去构造基类子对象
(2)子类中的析构函数会自动地调用父类中的析构函数从而释放基类子对象,而父类中析构函数不会自动调用子类的析构函数
(3)delete一个指向子类对象的父类指针时,被调用的仅仅是父类中的析构函数,而该析构函数不会自动调用子类中的析构,从而造成内存泄露,可以通过使用虚析构解决此问题(明天讲到)
C++_基础_运算符重载2的更多相关文章
- C++_基础_运算符重载
内容: (1)输入输出运算符重载 (2)友元类和友元函数 (3)双目运算符重载 (4)单目运算符重载 (5)不能被重载的运算符 (6)只能定义为成员形式的运算符 1.输入输出运算符重载如: int n ...
- 网易云课堂_C++开发入门到精通_章节4:运算符重载
课时23运算符重载 运算符重载 重载赋值运算符 Person& Person::operator=(const Person& other) { //检查自赋值 if (this == ...
- C++学习6-面向对象编程基础(运算符重载、类的派生与继承、命名空间)
运算符重载 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.重载的运算符是遵循函数重载的选择原则,根据不同类型或不同参数来选择不同的重载运算符. 运 ...
- C++_基础_类和对象3
内容: (1)析构函数 (2)拷贝构造和拷贝赋值 (3)静态成员 (4)成员指针 (5)输入输出运算符重载 1.析构函数 当一个对象被创建时,自动调用构造函数进行初始化 当一个对象被销毁时,自动调用析 ...
- C++语言基础(17)-运算符重载
运算符重载的格式为: 返回值类型 operator 运算符名称 (形参表列){ //TODO: } 一.在类里面实例运行符重载 #include <iostream> using name ...
- 面向对象程序设计-C++_课时30运算符重载——基本规则_课时31运算符重载——原型_课时32运算符重载——赋值_课时33运算符重载——类型转换
区分初始化,赋值 #include <iostream> using namespace std; class Fi { public: Fi() {}//1构造函数 }; class F ...
- C++_基础_继承、多态
内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的 ...
- C++_基础_类和对象2
内容: (1)构造函数 (2)初始化列表及其必要性 (3)支持自定义类型转换的构造函数 (4)this指针 (5)const对象和成员函数 (6)析构函数 1.构造函数1.1 格式: class 类名 ...
- java工程师_基础_阶段一_HTML笔记篇
一.了解HTML语言 html:超文本标记语言. 二.HTML整体结构<html> <head> </head> <body> </body> ...
随机推荐
- Yii的场景
先上代码 class User extends CActiveRecord{ public function rules() { return array( ...
- C#复制数据库,将数据库数据转到还有一个数据库
本文章以一个表为例,要转多个表则可将DataSet关联多个表.以下给出完整代码.包含引用以及main函数与复制函数. 要说明的是,必须先用Sql语句复制表结构,才干顺利的使用下面代码复制数据. usi ...
- android 自定义ViewGroup和对view进行切图动画实现滑动菜单SlidingMenu[转]
http://blog.csdn.net/jj120522/article/details/8095852 示意图就不展示了,和上一节的一样,滑动菜单SlidingMenu效果如何大家都比较熟悉,在这 ...
- Repeater获取某一行TextBox值
TextBox tb = (TextBox)e.Item.FindControl("TextBoxID");
- CAD创建不规则形状视口
选择CAD模型空间中多段线,在指定的布局中创建视口,方法如下: /// <summary> /// 创建视口 /// </summary> /// <param name ...
- easyui的样式easyui-textbox的一个bug
easyui-testbox这个样式很恶心,用了这个就不能用传统的JQ来取值了,最近在使用上又发现了一个问题,就是赋值为0时,在输入框上会不显示,坑. <input class="ea ...
- 《think in python》学习-3
函数 函数是指用于进行某种计算的一系列语句的有名称的组合. type(32) 就是一个函数调用的例子 类型转换函数 python提供了一些可将某个值从一种类型转换为另外一个类型的内置函数 int(32 ...
- ORACLE函数TO_CHAR以及数字转换格式[Z]
本来这是很简单的函数,但在屡次忘记格式之后,决定还是翻译一遍以铭记在心. 参考<<Oracle Database SQL Reference>>. 关于nl ...
- (转)C#DataTable学习心得
一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...
- 安装Ubuntu小计
因为想学Linux了,所以想装一个Linux版本尝尝鲜,听说Ubuntu桌面版很炫,所以也没有啥特定理由的选了这个版本(实际我装的时候用了Ubuntu Kylin). 具体安装过程可以参考如下的教程: ...