基类函数中如何调用子类的函数?

fisheep_works 2011-03-30 11:06:40
在基类的一个函数中进行处理,处理完成后通知子类进行处理。

这时基类如何调用子类的某一个函数呢?!
...全文
751 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengqiwu87 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fisheep_works 的回复:]

引用 9 楼 king_hhuang 的回复:

B0 *p; //声明基类指针,对所有继承类都适用
B1 b1; //声明派生类对象
p=&b1;
fun(p); //调用派生类B1函数成员
例子中p声明的是一个基类指针,最后fun(p)调用的是B1的成员函数;B0内部已经通过虚函数的重载达到了访问子类B1中函数的目的


C/C++ code

#incl……
[/Quote]
LZ,看你的帖子,发现你的问题貌似还没解决啊!我遇到类似的情况,可以交流一下
singwhatiwanna 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 king_hhuang 的回复:]
//动态联编与虚函数。
//动态绑定联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。虚函数是动态绑定的基础。
//是非静态的成员函数。
//在类的声明中,在函数原型之前写virtual。
//virtual 只用来说明类声明中的原型,不能用在函数实现时。
//具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
//本质:不是重载声明而是覆盖。
……
[/Quote]
都是牛人,我没啥好说的了。
fisheep_works 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 king_hhuang 的回复:]

B0 *p; //声明基类指针,对所有继承类都适用
B1 b1; //声明派生类对象
p=&b1;
fun(p); //调用派生类B1函数成员
例子中p声明的是一个基类指针,最后fun(p)调用的是B1的成员函数;B0内部已经通过虚函数的重载达到了访问子类B1中函数的目的
[/Quote]


#include <iostream.h>

class B0 //基类B0声明
{
public:
virtual void display() //虚成员函数
{
cout<<"B0::display()"<<endl;
子类函数ABC();
}
};

我的意思是在类的内部处理的时候进行调用。。。
King_hhuang 2011-03-30
  • 打赏
  • 举报
回复
B0 *p; //声明基类指针,对所有继承类都适用
B1 b1; //声明派生类对象
p=&b1;
fun(p); //调用派生类B1函数成员

例子中p声明的是一个基类指针,最后fun(p)调用的是B1的成员函数;B0内部已经通过虚函数的重载达到了访问子类B1中函数的目的
fisheep_works 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 king_hhuang 的回复:]

//动态联编与虚函数。
//动态绑定联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。虚函数是动态绑定的基础。
//是非静态的成员函数。
//在类的声明中,在函数原型之前写virtual。
//virtual 只用来说明类声明中的原型,不能用在函数实现时。
//具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
//本质:不是重载声明而是覆盖。……
[/Quote]

是基类中调用函数,不是在类的外部调用
Eleven 2011-03-30
  • 打赏
  • 举报
回复
C++ 多态~
quwei197874 2011-03-30
  • 打赏
  • 举报
回复
多态.
qwd100815 2011-03-30
  • 打赏
  • 举报
回复
利用C++的特性——虚函数
shenyi0106 2011-03-30
  • 打赏
  • 举报
回复
利用C++的特性——虚函数
King_hhuang 2011-03-30
  • 打赏
  • 举报
回复
//动态联编与虚函数。
//动态绑定联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。虚函数是动态绑定的基础。
//是非静态的成员函数。
//在类的声明中,在函数原型之前写virtual。
//virtual 只用来说明类声明中的原型,不能用在函数实现时。
//具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
//本质:不是重载声明而是覆盖。
//调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。

#include <iostream.h>

class B0 //基类B0声明
{
public:
virtual void display() //虚成员函数
{
cout<<"B0::display()"<<endl;
}
};
class B1: public B0 //公有派生
{
public:
void display()
{
cout<<"B1::display()"<<endl;
}
};
class D1: public B1 //公有派生
{
public:
void display()
{
cout<<"D1::display()"<<endl;
}
};

void fun(B0 *ptr) //普通函数,用一个动态指针指向一个暂时不确定的函数
{
ptr->display();
}

void main() //主函数
{
B0 *p; //声明基类指针,对所有继承类都适用
B0 b0; //声明基类对象
B1 b1; //声明派生类对象
D1 d1; //声明派生类对象
p=&b0;
fun(p); //调用基类B0函数成员
p=&b1;
fun(p); //调用派生类B1函数成员
p=&d1;
fun(p); //调用派生类D1函数成员
}
King_hhuang 2011-03-30
  • 打赏
  • 举报
回复
虚函数
fandh 2011-03-30
  • 打赏
  • 举报
回复
用虚函数呀!或者发送消息!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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