关于继承和虚函数的问题

l1h2l3 2010-06-01 10:42:22
#include "stdafx.h"
#include <iostream>
using namespace std;

class Parent
{
public:
void Function1() { cout << "Parent's Function1" << endl;}
virtual void Function2() { cout << "Parent's Function2" << endl;}
};

class Child : public Parent
{
public:
void Function1() { cout << "Child's Function1" << endl; }
void Function2() { cout << "Child's Function2" << endl; }
};

int _tmain(int argc, _TCHAR* argv[])
{
Parent* pParent;
pParent = &Child();

pParent->Function1();
pParent->Function2();

return 0;
}

这个输出结果是:
Parent's Function1
Child's Function2

第二行我明白,但是第一行为什么调用的是父类的Function1?多谢啦
...全文
93 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
l1h2l3 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 selooloo 的回复:]
pParent->Function1();
Function1不是虚函数,没虚函数表,不构成动态,pParent取编译时的静态类型,即编译器看到的pParent就是个Parent指针,调用也是Parent中的Function1();
[/Quote]
多谢,刚结完帖,不然也分你点儿分了。
selooloo 2010-06-01
  • 打赏
  • 举报
回复
pParent->Function1();
Function1不是虚函数,没虚函数表,不构成动态,pParent取编译时的静态类型,即编译器看到的pParent就是个Parent指针,调用也是Parent中的Function1();
l1h2l3 2010-06-01
  • 打赏
  • 举报
回复
楼上几位批评的是,多谢各位。结帖了。惭愧
arong1234 2010-06-01
  • 打赏
  • 举报
回复
一个指针变量一旦定义,它得类型怎么会随着赋值发生改变?变量得类型在其生命期内是永远不变得[Quote=引用 2 楼 l1h2l3 的回复:]
引用 1 楼 we_sky2008 的回复:
因为Function1不是虚函数

可是pParent = &Child();
就相当于把pParent转成了Child类型的了对吧?
那样的话他调为什么会调父类的呢?
[/Quote]
arong1234 2010-06-01
  • 打赏
  • 举报
回复
如果不是虚函数,就不管指针实际指向谁,只关心指针得当前类型是什么
这难道不是“虚函数”定义得反例么?如果不是这样,那么虚函数还有什么用?[Quote=引用 2 楼 l1h2l3 的回复:]
引用 1 楼 we_sky2008 的回复:
因为Function1不是虚函数

可是pParent = &Child();
就相当于把pParent转成了Child类型的了对吧?
那样的话他调为什么会调父类的呢?
[/Quote]
ww884203 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 l1h2l3 的回复:]
引用 1 楼 we_sky2008 的回复:
因为Function1不是虚函数

可是pParent = &Child();
就相当于把pParent转成了Child类型的了对吧?
那样的话他调为什么会调父类的呢?
[/Quote]
楼上已经说了,这个不是虚函数,所以编译器没有创建vptr,就不知道动态绑定。
还是好好看书吧
l1h2l3 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ww884203 的回复:]
引用 1 楼 we_sky2008 的回复:
因为Function1不是虚函数

UP
楼主多看看书上虚函数那一段吧
[/Quote]

ww884203 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 we_sky2008 的回复:]
因为Function1不是虚函数
[/Quote]
UP
楼主多看看书上虚函数那一段吧
l1h2l3 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 we_sky2008 的回复:]
因为Function1不是虚函数
[/Quote]
可是pParent = &Child();
就相当于把pParent转成了Child类型的了对吧?
那样的话他调为什么会调父类的呢?
we_sky2008 2010-06-01
  • 打赏
  • 举报
回复
因为Function1不是虚函数

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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