C++学习笔记(四)
来源:互联网 发布:spss mac下载官网 编辑:程序博客网 时间:2024/06/14 07:12
多态性与虚函数
运算符重载:
重载成类成员函数:<返回类型> <类名>::operator <op>(<类型> 参数){…}
由于有this指针,故单目运算符不带参数,双目运算符带一个参数。
声明为友元函数:friend<返回类型> operator <op>(参数,参数){}
规则:通常单目运算符最好重载为成员函数,双目运算符最好重载为友元函数。
不能新定义运算符,不能改变运算符的优先级与运算量个数…
重载=:
1.必须重载为非静态成员函数,可确保赋值目标运算量(左值)始终是一个对象。
2.为实现多重赋值,重载函数返回值定义为目标对象的类型。即返回到对象(实际中采用返回对象的引用)。
3.由于是赋值,对任何类,没有提供重载运算符函数时,C++自动提供一个默认赋值运算符函数。(不提供分配空间的功能),为此在此需求时,应提供重载运算符函数。
重载增量,减量运算符:
++a:<返回类型&> <类名>::operator<op>( )
{…}
a++: <返回类型> <类名>::operator<op>(int ) = a++(0)//看成双目的
{…}
重载():多目运算符,适用多个运算符的情况
A(1,1)等价于a.operator()(1,2),注意返回值
重载[ ]:双目运算符,只能声明为非静态成员函数,不能是友元函数。
虚函数:
静态编联:在编译时,编译系统根据对象就能决定调用固定的函数体代码段。(支持c++运算符重载与函数名重载的多态性)
动态编联:(virtual)采用虚函数实现多态,运行时,将函数的形式参数与函数的不同版本动态的进行匹配的编联过程,必须将指向基类的指针访问虚函数。
与重载成员函数不同:必须保证参数完全一致,重载成员函数则确保参数个数不同,or至少一个参数的类型不同。
基类中声明成员函数为虚函数,则所有派生类仍是虚函数。
实现机制:c++为每个至少拥有一个虚函数的类建立起一个与之有关的虚函数表VFT,一系列函数指针,一个类只有一个VFT,由所有对象共享,自动生成,函数指针隐含。
先找到本类的vptr指针,进入VFT,根据本类的VFT表来确定指向的成员函数入口地址(实际上感觉就是在编译的时候做了点手脚)。
纯虚函数:
Class XX{
virtual <类型> 纯虚函数名(参数表) = 0;
};
1. 派生类中必须定义其实现版本,否则,将产生编译错误。
含有纯虚函数的类,成为抽象类:用来描述一般抽象概念性的东西,只能做基类,不能为它创建对象
- c学习笔记<四>
- 《C和指针》学习笔记(四)
- [C++]C++学习笔记(四)
- C语言学习笔记(四)数组
- C语言程序学习(四)笔记
- 《Effective C++》学习笔记(四)
- Objective-c 学习笔记(四)
- C语言学习笔记(四)
- 《effective c++》学习笔记(四)
- C语言学习笔记(四)
- c语言学习笔记四
- C/C++学习笔记(四)
- object-c 学习笔记四
- Objective C学习笔记(四)
- C语言学习入们到精通之学习笔记(四)
- iOS开发学习笔记-C语言学习(四)
- IOS之Objective-C学习笔记(四)
- (c/c++学习笔记四)指针基础
- require机制
- 121. Best Time to Buy and Sell Stock
- CREELINKS平台_处理器CeAd资源使用说明(CeAd的配置与使用)
- JSON-lib框架,转换JSON、XML不再困难
- BZOJ 2656 [Zjoi2012] 数列(sequence)
- C++学习笔记(四)
- docker使用容器ubuntu安装mongodb
- mybatis插入Date类型报错的小问题
- MVC模式
- Java大用处——动态数组的实现
- JDK中的Timer和TimerTask详解
- 二叉树的深度
- SpringMVC 中整合JSON、XML视图一
- Java字符的编码解码与乱码问题