我有4重载函数vfoo
(3是虚拟的)重载函数(虚拟/非虚拟)
我想在这里测试几个概念:
- 使用虚拟函数
- 重载重载当派生类实现了自己的重载函数版本时,派生类中隐藏了函数。
- 什么是当一个基类指针存储在状空隙vfoo派生类(炭X)
#include<iostream>
using namespace std;
/*Base class having 4 overloaded function*/
class ClassBaseV
{
public:
virtual void vfoo(int x) {
cout << "ClassBaseV vfoo(int), x = " << x << endl;
}
virtual void vfoo(double x) {
cout << "ClassBaseV vfoo(double), x = " << x << endl;
}
virtual void vfoo(int x, double y) {
cout << "ClassBaseV vfoo(int,double), x = " << x << ", y = " << y << endl;
}
void vfoo(double x, int y) {
cout << "ClassBaseV vfoo(double,int), x = " << x << ", y = " << y << endl;
}
};
class ClassDerived1 : public ClassBaseV
{
public:
//Overloaded with char x
void vfoo(char x) {
cout << "ClassDerived1 vfoo(char), x = " << x << endl;
}
//over riding int x
void vfoo(int x) {
cout << "ClassDerived1 vfoo(int), x = " << x << endl;
}
};
int main()
{
ClassBaseV *cB = new ClassDerived1(); /*Base pointer storing derived class object*/
ClassDerived1 *cd1 = new ClassDerived1(); //Derived class object
cd1->vfoo('a');//Direct call using derived class object. this works
char a = 'a';
cB->vfoo(a); // trying to call char x using cB. This calls derived class int How?
cB->vfoo(10); // trying to call int x using CB. This calls derived class int
cB->vfoo(2.2); // Wanted this to not to work as base class overloaded functions are hidden but this works
return 1;
}
输出 ClassDerived1 vfoo(炭),X = A ClassDerived1 vfoo(INT)中,x = 97 ClassDerived1 vfoo(INT)中,x = 10 ClassBaseV vfoo(双)中,x = 2.2 – user2432444
如果你实现了一个重载集的一些函数,那么添加一个使用声明让其他人进入范围是普通的。节省使用上的尴尬失败... – Deduplicator