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> ...
随机推荐
- 在centos中添加开机自启动服务
将服务的shell脚本添加到/etc/rc.d的rc.local文件的最后面,需要在服务名称的前面加上其路径. 例如我要将httpd添加到开机自启动中,需要在rc.local添加如下代码 /usr/s ...
- js中__proto__(内部原型)和prototype(构造器原型)的关系
一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) Number.__proto__ === Function.prot ...
- asp.net 使用HttpModule记录全局错误
以前使用Global.asax记录全局的错误日志觉得挺好用,但是如果一个解决方案下有N多个项目,每个下边都需要加一个并且代码都还是重复的,终于有一天无法再忍受这种模式,考虑到HttpModule,直接 ...
- 无法识别的属性“targetFramework”
问题描述:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 解决办法:修改.NET Framework 版本为相应版本即可,例如2.0换成4.0. 参考:http://bl ...
- Linux学习之修改主机名
1.临时修改主机名 显示主机名: oracle@localhost:~$ hostname localhost 修改主机名: oracle@localhost:~$ sudo hostname orc ...
- windows.h与winsock2.h的包含顺序
#define WIN32_LEAN_AND_MEAN #include <windows.h>
- tomcat 设置session 时间
Tomcat Session过期时间 Tomcat采用数据库连接池技术,当用户在一定时间不对数据库有操作时间后,就自动关闭这个连接,这是为了更好的利用资源,防止浪费宝贵的数据库连接资源. 可以采用如 ...
- ajax防止重复提交请求1
ajax防止重复提交请求 A. 独占型提交 只允许同时存在一次提交操作,并且直到本次提交完成才能进行下一次提交. module.submit = function() { if (this.pro ...
- background-size使用
background-size: left center | 0% 50% | cover | contain backgound-size: left center | 0% 50%; 这个指的是背 ...
- OSC本地库推送到远程库
1.新建远程库: 例如:http://git.oschina.net/intval/learngit 2.本地生成ssh密钥 ssh-keygen -t rsa -C "intval@163 ...