怎么突然发现不用虚函数,还是存在函数覆盖了呢?什么原因?

cqmou 2009-10-18 07:37:37
//间接基类试验
#include <iostream>
using std::endl;
using std::cout;

class human
{
public:
//virtual void Show()
void Show()
{
cout<<"human中Show()函数"<<endl;
}
};

//派生类一
class man:public human
{
public:
//virtual void Show()
void Show()
{
cout<<"man中Show()函数"<<endl;
}
};

//派生类二
class woman:public human
{
//此派生类没有Show()函数
};

//派生类三
class son:public woman
{
//此派生类中没有Show()函数
};
int main()
{

man Jack;
Jack.Show();

son mimi;
mimi.Show();

return 0;
}

在VC++2005中编译,结果为:
man中的Show()函数
human中的Show()函数


这是为什么??非常感谢
...全文
70 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cphj 2009-10-18
  • 打赏
  • 举报
回复
没有定义虚函数,无论实际对象是什么类型,使用基类对象、指针、引用,都会绑定基类函数

没有定义虚函数,无论实际对象是什么类型,使用派生类对象、指针、引用,都会绑定派生类函数,如果派生类没有重新定义该函数,则绑定基类函数


定义虚函数,对于实际为基类的对象,使用基类对象、指针、引用,会动态绑定基类函数

定义虚函数,对于实际为派生类的对象,使用基类对象、指针、引用,会动态绑定派生类函数,如果派生类没有重新定义该函数,则绑定基类函数
cqmou 2009-10-18
  • 打赏
  • 举报
回复
不是说不使用虚函数,全部默认调用基类中同名函数吗?
无论是派生类对象还是基类对象
[Quote=引用 2 楼 thefirstz 的回复:]
C/C++ code#include<iostream>using std::endl;using std::cout;class human{public:void Show(){
cout<<"human中Show()函数"<<endl;
}
};class man:public human{public:void Show(){
cout<<"man中Show()函数"<<endl;
}
};class woman:public human{};class son:public woman{};int main(){//man Jack; human Jack;//这样就不覆盖了,子类中定义的函数当然要覆盖父类的 Jack.Show();

son mimi;
mimi.Show();

system("pause");return0;
}
[/Quote]
cqmou 2009-10-18
  • 打赏
  • 举报
回复
使用虚函数只能用基类指针和基类引用吗?
man Jack;
Jack.Show();

son mimi;
mimi.Show();

这种方式使用不能使用??谢谢
昵称很不好取 2009-10-18
  • 打赏
  • 举报
回复
#include <iostream> 
using std::endl;
using std::cout;

class human{
public:
void Show(){
cout <<"human中Show()函数" <<endl;
}
};

class man:public human{
public:
void Show(){
cout <<"man中Show()函数" <<endl;
}
};

class woman:public human{};

class son:public woman{};

int main(){

//man Jack;
human Jack; //这样就不覆盖了,子类中定义的函数当然要覆盖父类的
Jack.Show();

son mimi;
mimi.Show();

system("pause");
return 0;
}
cphj 2009-10-18
  • 打赏
  • 举报
回复
这个是静态绑定,函数调用的差异是静态绑定的不同导致,静态绑定会根据对象来直接调用对应的函数

用虚函数是在使用基类指针的时候也能准确调用真实类型对应的虚函数,产生多态效果

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧