父类指针指向子类实例:同名非虚函数

场景描述:如果父类指针指向子类的实例,并且调用的函数是一个子类和父类同名的函数,并且这个函数没有被定义为虚函数,肯定无法通过父类指针调用子类的接口。测试代码如下:

class CFather{
public:
     void Display()
    {
        cout<<"Father display"<<endl;
    }
};

class CSon:public CFather
{
public:
     void Display()
    {
        cout<<"Son dispaly"<<endl;
    }
};
      CSon son;      
      son.Display();
      //上面说明的是子类的同名函数覆盖掉父类的同名函数

      CFather* p=new CSon;
      p->Display();
      if(NULL!=p)
      {
          delete p;
          p=NULL;
      } 
      //下面说明了调用的是父类的同名函数

从上面可以看出父类的虚函数在子类中将被重新定义,而非虚函数将在通过父类指针的过程中被隐藏了。

时间: 2024-10-28 22:06:12

父类指针指向子类实例:同名非虚函数的相关文章

当父类指针指向子类对象时的函数调用

class A { public: void FuncA() { printf( "FuncA called\n" ); } virtual void FuncB() { printf( "FuncB called\n" ); } }; class B : public A { public: void FuncA() { A::FuncA(); printf( "FuncAB called\n" ); } virtual void FuncB(

基类与派生类,父类指针指向子类对象

先看一段代码: 1 #include<iostream> 2 3 using namespace std; 4 5 class Base{ 6 public: 7 Base() { cout<<"Base Creted"<<endl; } 8 ~Base() { cout<<"Base Destroyed"<<endl; } 9 }; 10 11 class Derived: public Base { 1

用父类指针指向子类对象

class A {public:A() { printf("A \n"); }~A() { printf(" ~A \n"); } // 这里不管写不写virtual,删除B对象的时候,都会被执行.因为这个例子是B*指针指向B对象,不是A*指针指向B对象.}; class B : public A{public:B() { printf("B \n"); }~B() { printf("~B \n"); }}; int mai

面向对象之父类变量指向子类实例对象分析

父类 public class person { public static string markup; static person() { markup = "markup"; } //无参数构造函数 //public person() //{ // Console.WriteLine("调用person构造函数"); //} public person(int parage, string paraname, string parahobby) { age =

关于父类引用指向子类对象

例如: 有以下2个类 public class Father { public int age = 70; public static string name = "父亲"; } public class Son : Father { public int age = 30; public static string name = "儿子"; } Father f=new Son(); 这种用法叫做“父类引用指向子类对象,或者叫“父类指针指向子类对象”,指的是定义一

腾讯2011一道父类指针和子类指针转化的题目

class ClassA { public: virtual ~ClassA(){} virtual void FunctionA(){} }; class ClassB { public: virtual void FunctionB(){} }; class ClassC :public ClassA , public ClassB { }; 关于pA,pB,pC的取值,下面的描述中正确的是: A.pA,pB,pC的取值相同. B.pC=pA+pB C.pA,pB不相同 D.pC不等于pA也

java父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

【转】父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

理解父类引用指向子类对象

java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时:   Animal a = new Cat(); 这代表什么意思呢? 很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向C