简单C++重载问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 23:42:12
class C0
{
public:
virtual void Set1(int i)
{
cout <<"C0:Set1 i=" <<i <<endl;
}
};
class C1:public C0
{
public:
int Set1(float i)
{
cout <<"C1:Set1 i=" <<i <<endl;
return 9;
}
};
void main()
{
C0 *p;
C1 obj2;
p = &obj2;
p-> Set1(3.0);
return;
}
这里P调用的set1是C0还是C1的?为什么呢?
感谢大家的回答,我也觉得是C1可是运行后是C0所以才的问的了,是什么原因出现这种情况的呢?是指针的原因么,2楼能补充下么?非常感谢

应该是基类C0的虚函数,
基类指针只能访问从基类继承的类成员.
C1类中的Set1()不是基类的重载,如果是重载,则可以访问派生类重载的虚函数.

同学 class定义后分号“;”(你用的是中文),我用记事本开始还没看出来。这里输出的c1的函数。因为参数(3.0f),按照最佳匹配原则,调用c1的。其实这里多少有点困惑,你要是测试重载(overload)还是多态(override)。
下面是测试override的
#include<iostream>
using namespace std;
class C0
{
public:
virtual void Set1(int i)
{
cout <<"C0:Set1 i=" <<i <<endl;
}
};
class C1:public C0
{
public:
virtual void Set1(int i)
{
cout <<"C1:Set1 i=" <<i <<endl;

}
};
void main()
{
C0 *p;
C1 obj2;
p = &obj2;
p-> Set1(3.0);
return;
}

建议你看一下:Bjarne Stroustrup的 the c++ programming language
还有可能你不是很喜欢自己在计算机上试试(比如分号),这样不去试试可能仅仅看完书效果还不是太好,建议多动手

明显是虚函数的多态啊。C1