C++重载重写重定义
来源:互联网 发布:js insertbefore 方法 编辑:程序博客网 时间:2024/05/18 18:16
在C++中有三个很相似的概念,很容易混淆。
下面就来总结区分,下面是测试代码
不过在分析代码之前先来分析一下关于上面的三个名词的概念
重载:1)必须在同一个类中,2)函数名相同,参数列表不同;
重写:1)必须发生在父子类中,2)函数名声明完全一致,且在父类中必须是虚函数;
重定义:1)必须发生在父子类中,2)函数名相同,且在父类中不是虚函数;
以上三个定义应该很好理解[个人总结,如有错误,请自行区分]
#include <iostream>using namespace std;class A{ public: void print(){cout << "this A\n";} virtual void print(int a){cout << "test A" << a;}};class B:public A{ public: void print(int a,int b){cout << "this B" << a << b;} virtual void print(int b){cout << "test B" << b;}};
关于如何编写测试用例,请根据上面的概念自行编写,这里我主要相对重定义进行一下测试。
c
int main(void)
{
A aa;
B bb;
bb.print();
}
编译结果:
test.cpp: In function ‘int main()’:test.cpp:21:11: error: no matching function for call to ‘B::print()’ bb.print(); ^test.cpp:21:11: note: candidates are:test.cpp:13:7: note: void B::print(int, int) void print(int a,int b){cout << "this B" << a << b;} ^test.cpp:13:7: note: candidate expects 2 arguments, 0 providedtest.cpp:14:15: note: virtual void B::print(int) virtual void print(int b){cout << "test B" << b;} ^test.cpp:14:15: note: candidate expects 1 argument, 0 provided可以看出子类不可以调用从父类那里继承过来的同名函数,这是因为子类覆盖了父类的函数名。如果此时一定要调用父类的同名方法必须要加上域名运算符::.bb.A::print();即可。
0 0
- 重载、重写、重定义
- 重写,重载,重定义
- 重写重载重定义
- 重载重写重定义
- 重写 重载 重定义
- 重载重写重定义
- 重写,重载,重定义
- 重载,重写,重定义
- 重载重写重定义
- 重载、重写与重定义
- 关于重载、重写、重定义
- c++重写、重载、重定义
- 重载重写与重定义
- C++重载,重写,重定义
- C++重载、重写、重定义
- C++重载重写重定义
- C++ 重载、重写、重定义
- 函数重载重写重定义
- c++开发ocx入门实践三--基于opencv的简易视频播发器ocx
- 字典树trie
- oracle数据库的静默(Quiesce)状态
- 长微博图片制作(无水印)
- Android小技巧
- C++重载重写重定义
- word2vec (一) 简介与训练过程概要
- PageRank Hadoop MapReduce
- hdoj-2099-整除的尾数
- 如何制作纯 ASCII 文本流程图
- Python安装模块出错(ImportError: No module named setuptools)解决方法
- Hibernate实现数据库增、删、改、查
- 【汇编】算符与伪指令笔记
- openjudge7624 山区建小学