代码如下:
class Base
{
virtual void SetDistance(int dist);
void SetDistance(int p1,int p2) {
SetDistance(p2-p1);
}
};class Derive : public Base
{
int distance;
void SetDistance(int dist) {
distance=dist;
}
};int main(int argc, char* argv[])
{
int a=1,b=3;
Derive d;
d.SetDistance(a,b); //这一句不能通过编译“error C2660: 'SetDistance' : function does not take 2 parameters” return 0;
}
除了将函数改名以外,最好的解决办法是什么?
class Base
{
virtual void SetDistance(int dist);
void SetDistance(int p1,int p2) {
SetDistance(p2-p1);
}
};class Derive : public Base
{
int distance;
void SetDistance(int dist) {
distance=dist;
}
};int main(int argc, char* argv[])
{
int a=1,b=3;
Derive d;
d.SetDistance(a,b); //这一句不能通过编译“error C2660: 'SetDistance' : function does not take 2 parameters” return 0;
}
除了将函数改名以外,最好的解决办法是什么?
解决方案 »
- 关于视频数据中转服务器程序应该如何设计?
- 工作线程退出后会自动删除,那用WaitForSingleObject还能捕捉到它的状态吗?
- 多线程同步问题, CSingleLock的作用
- 如何限制在编辑框中输入特殊字符?!@#$%^&
- 简单问题:如何保留两位有效小数
- SOS!!如何在程序中实现对打印机控制,打完后令打印机退纸几厘米??谢谢!!!
- 关于数据库中的数据在列表控件中显示的问题!
- 做过串口通讯的同志请进来!
- word2000关闭时会调用哪个dll
- 求使用CreateDIBSection显示8位灰度图的例子(不用那种多通道转单通道)
- 如何CWnd派生类中创建一个WS_CHILD风格的窗口?
- 进度条中CProcessCtrl::StepIt(),SetPos()没有作用问题
class Base
{
public:
virtual void SetDistance(int dist);
void SetDistance(int p1,int p2) {
SetDistance(p2-p1);
}
};class Derive : public Base
{
public:
int distance;
void SetDistance(int dist) {
distance=dist;
}
};
{
public:
virtual void SetDistance(int dist)=0;
void SetDistance(int p1,int p2) {
SetDistance(p2-p1);
}
};class Derive : public Base
{
public:
int distance;
void SetDistance(int dist) {
distance=dist;
}
};int main(int argc, char* argv[])
{
int a=1,b=3;
Derive d;
Base *p;
d.SetDistance(a); //这一句不能通过编译“error C2660: 'SetDistance' : function does not take 2 parameters”
p=(Base*)&d;
p->SetDistance(a,b);
return 0;
}
//强制转换为基类可以的
{
int a=1,b=3;
Derive d;
((Base*)&d)->SetDistance(a,b);
return 0;
}
1. 如果是virtual 那麼被改寫,但通過指針 或引用仍然可以調用
2. 否則 被同名函數隱藏. 不能直接通過對象調用