Vij*_*jay 13 c++ virtual inheritance
我只是在c ++中使用虚拟关键字和继承概念进行测试.我写了一个小程序:
#include<stdio.h>
#include<iostream>
using namespace std;
class cna_MO
{
public:
virtual void print()
{
cout << "cna_MO" << endl;
}
};
class cna_bsc:public cna_MO
{
public:
void print()
{
cna_MO::print();
}
void print(int a)
{
cout << "cna_BSC" << endl;
}
};
class cna_Mo
{
cna_MO *_mo;
public:
cna_Mo()
{
_mo = new cna_bsc;
}
virtual void print(int a)
{
cout << "cna_Mo with arg" << endl;
_mo->print(5);
}
virtual void print()
{
cout << "cna_Mo" << endl;
_mo->print();
}
};
int main()
{
cna_Mo valid_mo;
cout << "old case is started" << endl;
valid_mo.print();
cout << "new case is started" << endl;
valid_mo.print(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在这里做的是我在子类的父类中重载了一个虚函数!这不是正确的做法吗?
我收到编译错误如下:
"temp10.cc",第45行:错误:调用"cna_MO :: print()"时参数太多.
Alo*_*ave 25
从Derived类中的Base类重载函数后,Base类中具有相同名称的所有函数都将隐藏在Derived类中.
将函数添加cna_bsc::print(int a)
到派生类cna_MO::::print()
后,Derived类的用户将无法再看到该函数.这称为函数隐藏.
解决方案: 为了使隐藏函数在派生类中可见,您需要添加:
using cna_MO::print;
Run Code Online (Sandbox Code Playgroud)
在public
派生类的部分中cna_bsc
.
好读:
是什么意思,警告:Derived :: f(char)隐藏Base :: f(double)?