C++重写与重载、重定义
文章引用自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/
重定义 (redefining)也叫做隐藏:
子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
class Base {
private:
virtual void display() { cout<<"Base display()"<<endl; }
void say(){ cout<<"Base say()"<<endl; }
public:
void exec(){ display(); say(); }
void f1(string a) { cout<<"Base f1(string)"<<endl; }
void f1(int a) { cout<<"Base f1(int)"<<endl; } //overload,两个f1函数在Base类的内部被重载
};
class DeriveA:public Base{
public:
void display() { cout<<"DeriveA display()"<<endl; } //override,基类中display为虚函数,故此处为重写
void f1(int a,int b) { cout<<"DeriveA f1(int,int)"<<endl; } //redefining,f1函数在Base类中不为虚函数,故此处为重定义
void say() { cout<<"DeriveA say()"<<endl; } //redefining,同上
};
class DeriveB:public Base
{
public:
void f1(int a) { cout<<"DeriveB f1(int)"<<endl; } //redefining,重定义
};
int main(){
DeriveA a;
Base *b=&a;
b->exec(); //display():version of DeriveA call(polymorphism) //say():version of Base called(allways )
b里边的函数display被A类覆盖,但是say还是自己的。
a.exec(); //same result as last statement
a.say();
DeriveB c;
c.f1(1); //version of DeriveB called
}
综上所述,总结如下:
a 相同的范围(在同一个类中,或者同为全局的,总之,在同一个作用域中)
最新文章
- ASP.NET 字符编码的那些事
- Play Framework 完整实现一个APP(十一)
- IP地址
- 大数据导致DataReader.Close超时的异常
- BestCoder9 1003 Revenge of kNN(hdu 4995) 解题报告
- yii2.0根据query查看sql语句
- PKUSC2016滚粗记
- Python datetime之timedelta
- Python内置函数(53)——setattr
- Java 枚举 的学习
- [转载] apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
- Python模块——PrettyTable 模块
- C#6.0特性与vs2015
- 【转】使用Log4Net进行日志记录
- 解决 canvas 将图片转为base64报错
- canu软件文献
- 基于python2【重要】怎么自行搭建简单的web服务器
- Linux 常用的压缩命令有 gzip 和 zip
- MySQL--查询表统计信息
- leetcode-896-单调数列
热门文章
- AdapterView及其子类之二:使用ListActivity及ArrayAdapter创建列表
- http协议分析工具
- hadoop的hdfs文件操作实现上传文件到hdfs
- sudo apt-get install lib32stdc++6
- PHP strpos() 函数
- SqlServer按照指定顺序对字段进行排序
- RotatingDoughnut
- Centos部署nagios+apache实现服务器监控
- [ZZ]良好的编码习惯
- Bootstrap的Affix与ScrollSpy用法 bootstrap-scrollspy &;&; bootstrap-dropdown