二十 操作符重载
函数操作符"()"
功能:让对象当做函数来使用
注:对参数的个数、返回类型没有限制
eg:
class A{...};
A a;
//a.operator()(100,200)
a(,); 下标操作符"[]"
功能:让对象可以当做数组一样去使用
注:非常对象返回左值,常对象返回右值
eg:
string s("hello");
//s.operator[](0)
s[] = 'H';//ok
cout << s << endl;//Hello
-------------
const string s("hello");
s[] = 'H';//error 类型转换操作符
功能:实现自定义类型的转换
class 源类型{
operator 目标类型(void)const{...}
}; 操作符重载的限制
)不是所有的操作符都能重载,下面几个不能重载
--》作用域限定操作符 "::"
--》直接成员访问操作符 "."
--》直接成员指针解引用操作符 ".*"
--》条件操作符 "?:"
--》字节长度操作符 "sizeof"//获取类型大小
--》类型信息操作符 "typeid"//获取类型信息(后面讲)
)如果一个操作符的所有操作数都是基本类型,则无法重载。
int operator+(int a,int b){//error
return a - b;
}
)操作符重载不会改变编译器预定义优先级
)操作符重载无法改变操作数的个数(函数操作符例外)
)无法通过操作符重载机制发明新的的操作符
operator@()//error
)只能使用成员形式不能使用全局函数形式的操作符
=、()、[]、-> ===================
二十一 继承(Inheritance)
继承的概念
通过一种机制表达类与类之间共性和特性的方式,利用已有的类定义新的类,这种机制就是继承。 eg:描述人类、学生类、教师类
人类:姓名、年龄、吃饭、睡觉
学生类:姓名、年龄、吃饭、睡觉、学号、学习
教师类:姓名、年龄、吃饭、睡觉、工资、讲课
-------------
人类:姓名、年龄、吃饭、睡觉
学生类继承人类:学号、学习
教师类继承人类:工资、讲课 人类(父类/基类)
/ \
学生类 教师类(子类/派生类) 继承的语法
)定义
class 子类名
:继承方式1 基类1,继承方式2 基类2,...{};
)继承方式
public:公有继承
protected:保护继承
private:私有继承 eg:
class A{...};
//A类派生B类,B类继承A类
//A类称为基类(父类),B称为子类
class B:public A{
//B类中会存在一份A类中的成员
}; 公有继承特性(Public)
3.1 子类对象可以继承基类的属性和行为,通过子类访问基类中的成员,如果是基类对象在访问它们一样。
注:子类对象中包含基类的部分称为"基类子对象" 3.2 向上和向下造型
)向上造型//重点掌握
将子类类型的指针或引用转换为基类类型的指针或引用。这种操作范围缩小的类型转换,在编译器看来是安全的,所以可以隐式转换。
eg:
class Base{};
class Derived:public Base{};
void func(Base& b){}
int main(void){
Derived d;
Base* pb = &d;//向上造型
Base& rb = d;//向上造型
func(d);//向上造型
}
)向下造型//了解
将基类类型指针或引用转换为子类类型的指针或引用。这种操作范围放大的类型转换,在编译器看来是危险的,因此必须显式转换。 3.3 子类继承的基类成员
)在子类中,可以直接访问基类中公有成员和保护成员,就如同它们是子类自己的成员一样。
)在子类中,所继承过来的私有成员虽然存在(占据内存),但是不可见,所以无法直接访问,但是可以提供保护或公有的接口函数来间接访问。
)基类的构造函数和析构函数,子类无法继承,但是可以在子类自己的构造函数中通过初始化表,显式的指明基类部分(基类子对象)的初始化方式。
eg:
class Base{
public:
Base(int data):m_data(data){}
int m_data;
};
class Derived:public Base{
public:
Derived(int data1,int data2)
:Base(data1),m_data2(data2){}
int m_data2;
}; 3.4 子类隐藏基类中的成员
)子类和基类中定义同名的成员函数,因为作用域不同,不会构成重载关系,而是一种隐藏关系。如果需要在子类中访问所隐藏的基类成员,可以使用作用域限定操作符来显式指明。
)通过using声明可以将基类的成员函数引入子类的作用域的,形成重载。//不推荐 继承方式和访问控制属性
)三种访问控制限定符:影响访问该类成员的位置
访问控制 访问控制 内部 子类 外部 友元
限定符 属性 访问 访问 访问 访问
public 公有成员 ok ok ok ok
protected 保护成员 ok ok no ok
private 私有成员 ok no no ok
---------------------------------------------
)三种继承方式:影响通过子类访问基类中的成员的可访问性。
---------------------------------------------
基类中的 在公有子 在保护子 在私有子
类中变成 类中变成 类中变成
公有成员 公有成员 保护成员 私有成员
保护成员 保护成员 保护成员 私有成员
私有成员 私有成员 私有成员 私有成员
----------------------------------------------
注:私有子类和保护子类的指针或引用,不能转换为其基类类型的指针或引用(不能向上造型). 练习:复习公有继承的语法特性

操作符重载、继承(day08)的更多相关文章

  1. Python中的操作符重载

    运算符重载是指在方法中拦截内置的操作----当类的实例出现在内置操作中,Python会自动调用自定义的办法,并且返回自定义方法的操作结果.     类可以重载python的操作符 操作符重载使我们的对 ...

  2. Python学习手册之内部方法、操作符重载和对象生命周期

    在上一篇文章中,我们介绍了 Python 的类和继承,现在我们介绍 Python 的内部方法.操作符重载和对象生命周期. 查看上一篇文章请点击:https://www.cnblogs.com/dust ...

  3. python——操作符重载(重要)

    类可以重载python的操作符   旧认识:__X__的名字 是系统定义的名字:是python特殊方法专用标识.   操作符重载使我们的对象与内置的一样.__X__的名字的方法是特殊的挂钩(hook) ...

  4. lua 14 metatable (类似操作符重载)

    转自:http://www.runoob.com/lua/lua-metatables.html 感性认识: “Lua中Metatable这个概念, 国内将他翻译为元表. 元表为重定义Lua中任意一个 ...

  5. c++ 操作符重载和友元

    操作符重载(operator overloading)是C++中的一种多态,C++允许用户自定义函数名称相同但参数列表不同的函数,这被称为函数重载或函数多态.操作符重载函数的格式一般为: operat ...

  6. paip.操作符重载的缺失 Java 的一个大缺点

    paip.操作符重载的缺失 Java 的一个大缺点 #----操作符重载的作用 1.提升用户体验 操作符重载..可以让代码更加自然.... 2.轻松实现代码代码移植 例如   java代码会直接移植到 ...

  7. C#中如何利用操作符重载和转换操作符

    操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...

  8. 操作符重载.xml

    pre{ line-height:1; color:#1e1e1e; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#627cf6; ...

  9. [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)

    operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...

随机推荐

  1. window.open()方法(弹出层)

    1, 最主要的弹出窗体代码    window.open('page.html'); 2, 经过设置后的弹出窗体    window.open('page.html', 'newwindow', 'h ...

  2. ubuntu下C程序的编辑、编译、运行

    均以hello world程序为例 一.vim hello.c/hello.cpp 创建hello.c/hello.cpp文件,并进入vim界面 二.此时按键盘上的很多键均不会有任何反应,键入i,进入 ...

  3. rk3288对于parameter参数文件的解析处理【转】

    本文转载自:http://blog.csdn.net/groundhappy/article/details/56479694 rk3288有一个parameter文件. 类似于 FIRMWARE_V ...

  4. C# Socket 您的主机中的软件中止了一个已建立的连接 An established connection was aborted by the software in your host machine

    http://tieba.baidu.com/p/3223234493 问题: 服务端在接收客户端数据的时候,抛了个异常出来:System.Net.Sockets.SocketException: 您 ...

  5. z-index 、层叠上下文、层叠级别、z-index失效

    一.z-index z-index默认处于非激活状态,只有定位元素(即position:relative/absolute/fixed时)才会被激活. z-index与层叠上下文关联. 当z-inde ...

  6. js实用篇之数组、字符串常用方法

    常常在开发中,会使用到很多js数组和字符串的处理方法,这里列举一些我常用到的一些,方便大家参考使用. 数组方面 push:向数组尾部增加内容,返回的是新数组的长度. var arr = [1,2,3] ...

  7. rabbitmq普通集群搭建详细步骤

    由于工作需求,需要安装rabbitmq,学习之余,记录一下安装过程 准备基础编译环境yum install gcc glibc-devel make ncurses-devel openssl-dev ...

  8. 「LOJ10150」括号配对

    [题目] Hecy 又接了个新任务:BE 处理.BE 中有一类被称为 GBE. 以下是 GBE 的定义: 空表达式是 GBE 如果表达式 A 是 GBE,则 [A] 与 (A) 都是 GBE 如果 A ...

  9. POI合并单元边框问题解决方法

    http://blog.csdn.net/hardworking0323/article/details/51105430

  10. 5.14web相关概念

    1.软件架构 1.C/S:客户端/服务器端 2.B/S:浏览器/服务器端 2.资源分类 1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析如:html,cs ...