C++中继承情况下的名称问题
来源:互联网 发布:惠安县招聘网络销售 编辑:程序博客网 时间:2024/06/05 04:14
如果基类中virtual函数的声明和子类中的生命不一致会怎么样?
没关系,相当于子类声明了新的virtual函数。
不过derived class内的名称会掩盖base class内的名称。
看下面来自《effective c++》 的例子:
class Base {private:
int x;
public:
virtual void mf1()
{
cout << "Base::mf1()" << endl;
}
virtual void mf1(int k)
{
cout << "Base::mf1(int)" << endl;
}
void mf3()
{
cout << "Base::mf3()" << endl;
}
void mf3(double)
{
cout << "Base::mf3(double)" << endl;
}
};
class Derived : public Base {
public:
virtual void mf1()
{
cout << "Derived::mf1()" << endl;
}
virtual void mf1(int k, int j)
{
cout << "Derived::mf1(int, int)" << endl;
}
void mf3()
{
cout << "Derived::mf3()" << endl;
}
};
int main()
{
Derived d;
d.mf1();
d.mf1(1, 1);
// d.mf1(1);
d.mf3();
// d.mf3(0.0);
}
注释掉的语句如果不被注释,将会出现编译错误。Derived中声明了mf1,导致base中的mf1(int)在Derived中是不可见的了,mf3同理。
如果想使用Base中的mf1和mf3,可以使用using声明式。
即将Derived修改为:
class Derived : public Base {
public:
using Base::mf1;
using Base::mf3;
virtual void mf1()
{
cout << "Derived::mf1()" << endl;
}
virtual void mf1(int k, int j)
{
cout << "Derived::mf1(int, int)" << endl;
}
void mf3()
{
cout << "Derived::mf3()" << endl;
}
};
这样main函数中的5条语句都能运行,运行结果为:
Derived::mf1()
Derived::mf1(int, int)
Base::mf1(int)
Derived::mf3()
Base::mf3(double)
更多请参考:
《Effective C++》Item 33, 36, 37
- C++中继承情况下的名称问题
- C++_Primer 15.5 继承情况下的类作用域
- C++中继承情况下的构造函数
- C++中继承情况下的类作用域
- 继承情况下的初始化
- Navicat for MySQL工具中大小写敏感的情况下表名称会出现变小写
- 继承情况下的类作用域
- 继承情况下类的作用域
- 使用c++builder中stringgird控件和设定行名称和列名称的问题
- C++中虚函数的理解,以及简单继承情况下的虚函数的表!
- c ++中继承问题小结
- 当Activity在不继承FragmengActivity的情况下,Fragment中集成ViewpagerIndicator使用详解
- XmlReader在未知元素的名称和属性的名称的情况下读取属性
- 【C++】继承派生中对象相互赋值情况
- 在Navicat for MySQL工具中大小写敏感的情况下表名称会出现变小写的情况,如何改回大写呢
- C++ 继承下的名称遮掩与重载
- 模板化基类内寻找继承而来的名称的问题
- 【C++】虚函数和虚继承的内存分布情况
- 静态导入包
- 虚拟机 "\\.\Global\vmx86": 系统找不到指定的文件.
- 相关视频算法
- Struts2的属性驱动与模型驱动
- ASP.NET+Ext Js4.0收缩面板
- C++中继承情况下的名称问题
- C++编译模式详解
- hdoj4028(离散DP)
- Java 可变参数 variable parameter
- PDFKit.NET 数字签名与文档处理
- 扔鸡蛋问题详解(Egg Dropping Puzzle)
- RMAN简明教程之五——RMAN还原和恢复
- 局域网聊天工具(多线程),支持客户端与客户端间通信,服务器负责信息的接收与发送
- HDOJ/HDU 4034 2011成都网络赛D题