一个类是否可以包含一个后来专门用于派生类的基类作为成员?

韦斯

我可以有一个类(“BIG”),它有另一个类作为成员(“Base”类型),以便在构造时,这个“Base”成员实际上将被设置为派生类?

特别是,我想拥有

class Base{
  public:
    void dostuff(){};
};

class DerivedA : public Base{
  public:
    void dostuff(){
     //implementation version A 
    }
};


class DerivedB : public Base{
  public:
    void dostuff(){
     //implementation version B 
    }
};

class BIG{
 Base mything;

 BIG(int Type){
  if (Type==0)
   mything=DerivedA();
  if (Type==1)
   mything=DerivedB();
 }
};

C++ 不允许这样做吗?特别是,我会将神话从 Base 转换为 DerivedA 或 DerivedB。难道我纠正向下转换只从基地允许指针到派生的指针,只有当基本指针实际上已经是一个指向派生类?

斯蒂芬·莱克纳

首先,您可能忘记了实际从Base. 但无论如何,多态需要一个指针或一个引用。否则,将派生类的对象分配给基类类型的变量将“切片”派生类对象,即它将从派生类对象中切出基类对象:

class Base{
  public:
    virtual void dostuff(){ cout << "in base" << endl; };
};

class DerivedA : public Base {
  public:
    virtual void dostuff(){ cout << "in derived" << endl; };
};

int main() {

  Base mything = DerivedA();  // slicing, will result in a `Base`-object
  mything.dostuff(); // Base class implementation

  Base *polymorph = new DerivedA(); // polymorphic; will point to a DerivedA-instance
  polymorph->dostuff(); // DerivedA class implementation of dostuff



}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用一个超类的一个变量来访问一个派生类的对象

您是否可以创建一个没有Object作为其基类的类结构

设计一个函数,该函数将两个抽象基类对象作为参数,并根据对象的派生类执行不同的操作

对包含另一个派生类的C ++类的继承

C#方法:是否有一个参数名称可以通用地插入“派生类名称”?

C#:将派生类作为一个通用参数传递

如果该类包含作为第一个元素的基类类型的成员,然后是其他成员,则编译器是否可以优化空基数?

检查两个(智能)指针是否指向同一个派生类

基类中的多个构造函数,并从Kotlin的派生类中调用最合适的一个

使__call__一个基类中的特定接口可用于所有派生类

如何从qml访问qabstractlistmodel派生类对象作为另一个类的属性?

为什么“ this”指针在派生类和第一个基类中具有相同的值

在C ++的类模板中是否可以有一个公共的,未专门化的静态成员?

特定基类的抽象类的C ++ Vector,作为另一个类成员

是否可以创建一个只能作为另一个类的成员实例但仍可以通过VB.NET公开访问的类?

c ++一个类可以包含一个与它成为朋友的类成员吗?

从C ++中另一个(不相关!)类的基类引用派生类的对象

从派生类派生一个类

基于另一个类创建一个新的派生类型

创建一个新的基 CDialogEx 派生类

一个类可以有将当前类作为参数的成员吗

我如何从另一个类的基类访问派生类中的受保护成员

如何初始化作为另一个类的成员变量的基类对象?

基类可以声明一个虚方法而不定义它吗?仍然在派生类中定义

是否可以在另一个模板类上专门化模板类的方法?

如何将基类成员引入派生类定义,但只有一个重载?

如何创建一个派生类来记录对其成员的所有访问?

基类和该基类的派生类可以有一个共同的朋友类,它是这两个类的朋友吗?

基类和该基类的派生类可以有一个共同的朋友类,它是这两个类的朋友吗?