繁体   English   中英

多态性:如何访问派生类成员函数?

[英]Polymorphism: How do you access derived class member functions?

假设我们有一个来自抽象基类的派生类。 指向抽象基类的指针在main中声明,并通过“new”分配给派生类。 如何从指向基类的指针(而不是派生类的对象)访问派生类的成员函数?

例:

#include <iostream>
using namespace std;

class clsStudent
{
public:
   virtual void display() = 0;// {cout<<"Student\n";}
};

class clsInternational : public clsStudent
{
public:
   void display(){cout<<"International\n";} 
   void passportNo(){cout<<"Pass\n";}
};

class local : public clsStudent
{
public:
   void display(){cout<<"International\n";}
   void icNo(){cout<<"IC\n";}
};


int main()
{
   clsStudent * s = new clsInternational;
   clsStudent * s2 = new local;

   s->display(); 
   s->passportNo();  //This won't work

   return 0;
}

厚脸皮的回答:不要。 我的意思是,如果你真的需要,你的技术问题的答案是C ++中的dynamic_cast操作,以便进行“向下转换”(从基类转换为派生类)。

但退一步,这是虚拟功能的合理用例。 问问自己,我想要访问的常见含义是什么?

在这种情况下,我们希望所有学生都有一个识别号码。

工作源代码: http//ideone.com/5E9d5I

class clsStudent
{
public:
   virtual void display() = 0;// {cout<<"Student\n";}
   virtual void identifyingNumber() = 0;
};

class clsInternational : public clsStudent
{
public:
   void display(){cout<<"International\n";} 
   void identifyingNumber(){cout<<"Pass\n";}
};

class local : public clsStudent
{
public:
   void display(){cout<<"Local\n";}
   void identifyingNumber(){cout<<"IC\n";}
};


int main()
{
   clsStudent * s = new clsInternational;
   clsStudent * s2 = new local;

   s->display(); 
   s->identifyingNumber();  

   s2->display(); 
   s2->identifyingNumber();  

   return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM