64,678
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
class Base
{
public:
virtual void foo(short)
{
std::cout << "Base::foo(short)" << std::endl;
}
virtual void foo(double)
{
std::cout << "Base::foo(double)" << std::endl;
};
};
class Derived:public Base
{
public:
void foo(short)
{
std::cout << "Derived::foo(short)" << std::endl;
}
void test(void)
{
foo(3.14);//calls Derived::foo(short) !
}
};
int main(int argc,char* argv[])
{
Base* pd = new Derived();
pd->foo(3.14);//calls Base::foo(double) !
Derived d;
d.test();//calls Derived::foo(short) !
return 0;
}
Base* pd = new Derived();
pd->foo(3.14);//calls Base::foo(double)
//晚邦定,虚函数在起作用
Derived d;
d.test();//calls Derived::foo(short)
//类型确定就是Derived,不需要晚绑定,虚函数不起作用,Base::foo(double)被Derived::foo(short)隐藏了
//override的是void foo(short)
//这么写,你应该能明白是怎么回事了,楼主
#include <iostream>
class Base
{
public:
virtual void foo(short)
{
std::cout << "Base::foo(short)" << std::endl;
}
virtual void foo(double)
{
std::cout << "Base::foo(double)" << std::endl;
};
};
class Derived:public Base
{
public:
void foo(short)
{
std::cout << "Derived::foo(short)" << std::endl;
}
void foo(double)
{
std::cout << "Derived::foo(double)" << std::endl;
};
void test(void)
{
foo(3.14);
}
};
int main(int argc,char* argv[])
{
Base* pd = new Derived();
pd->foo(3.14);
Derived d;
d.test();
return 0;
}