c++基类对象如何调用子类函数

如题所述

第1个回答  2010-07-20
你是只调用子类自己的函数吗?

#include<iostream>
using namespace std;

class B0
{
public:
virtual void display()
{
cout<<"B0"<<endl;
}
};
class B1:public B0
{
public:
void display()
{
cout<<"B1"<<endl;
}
void displayB1()
{
cout<<" My is B1"<<endl;
}
};
class D1:public B1
{
public:
void display()
{
cout<<"D1"<<endl;
}

};

void fun(B0 * ptr)
{
ptr->display();
}
void funB1(B1 *ptr)
{
ptr->displayB1();
}

int main()
{
B0 b0,*p;

B1 b1;
D1 d1;

p=&b0;

fun(p);

p=&b1;

fun(p);
funB1((B1 *)p); //调用子类函数

p=&d1;

fun(p);
return 0;
}
第2个回答  2010-07-20
//动态联编与虚函数。
//动态绑定联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。虚函数是动态绑定的基础。
//是非静态的成员函数。
//在类的声明中,在函数原型之前写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函数成员
}本回答被提问者采纳

c++基类对象如何调用子类函数
funB1((B1 *)p); \/\/调用子类函数 p=&d1;fun(p);return 0;}

C++ 类的问题 基类成员函数可以调用子类的成员函数吗?
试试在abc里进行new然后输出,应该是可以的。忠告:不要在基类构造函数中使用任何本类的虚函数,因为构造函数在虚函数表的构建之前,所以执行结果是未知的,基类可能会也可能并不会 如你预期的那样调用子类重载的虚函数,

C++中,基类protected能给子类直接调用?
所以,基类的成员函数能调用自己的protected成员(其对象不能),子类的成员函数也能调用基类的protected成员(其对象不能)class A{public:A(int x,int y):x(x),y(y){}protected:void print(){cout<<"x point:"<<x<<endl<<"y point:"<<y<<endl;}private:int x;int y;};class B:pu...

C++问题 基类的成员函数 是否可以调用子类的成员函数
应该说不可以的 这个涉及到对象问题 一般来说对于父类来说他有多少方法子类都能用,但是父类没有的子类有的父类不能用 你说把子类设置成普通类是默认的强制类型转换吧 C++在有些方面限制的比较松 以前学过点 忘得差不多了

C++问题?
由于基类的函数B是虚函数,因此会根据对象的实际类型来确定要调用的函数。由于子类重写了基类的函数B,所以实际会调用子类的函数B。子类的函数B执行完毕后,控制流回到子类的函数A,继续执行子类函数A中的其他代码。总结起来,调用子类的函数A会先执行子类的函数A本身,然后在函数A内部调用基类的函数B,...

请在这里概述您的问题C++中,基类protected能给子类直接调用??
但是基类由public继承派生出的子类是可以直接调用protected成员的,不管是函数还是变量。但是子类是无法调用private成员。基类由private派生出的子类是无法调用父类任何东西的,因为父类所有成员对子类都是private的。基类由protected派生出的子类和public一样,但是对于子类的使用者,所有由基类继承而来的东西都...

c++有趣现象:private的成员函数可以在类的外部调用?
而不是这个引用所引用的对象A。C++标准里有对该问题的具体说明:当一个子类函数通过基类的指针调用时,访问权限取决于基类对该函数的声明。参考C++ Standard ISO\/IEC 14882:2003(E) 第11.6节:11.6 Access to virtual functions [class.access.virt]The access rules (clause 11) for a virtual ...

C++基类子类中,虚函数究竟是怎样判断该调用哪个函数的??
有虚函数时,每个对象的this指针都指向一个虚函数表(Virtual Table)的地址,这个表里存的就是虚函数的地址。编译的时候就决定了,普通函数调用时直接CALL这个函数的地址,而是虚函数时,是从这个虚表里取地址去调用的。

C++中,基类能引用派生类的成员函数吗?能引用派生类的对象吗?
如果基类中声明的参数相同的同名虚函数,就能引用;否则不能。基类中不能直接引用派生类的对象,同楼上的,可以把派生类当作基类来使用。

C++中用父类指针指向子类实例,用父类指针调用虚函数,问调用的是子类的...
你这个应该是调用的子类的函数,原因如下:如果是虚函数,是可以通过基类的指针调用子类的函数的。如果不是虚函数基类指针就只能调用基类函数

相似回答