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

韦斯

我可以有一个类(“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条评论
登录后参与评论

相关文章

来自分类Dev

创建一个新的基 CDialogEx 派生类

来自分类Dev

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

来自分类Dev

从派生类派生一个类

来自分类Dev

如何禁止C ++派生类从基类派生,但允许另一个派生类

来自分类Dev

可以在派生类中的operator <<调用C ++基类中的另一个operator <<吗?

来自分类Dev

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

来自分类Dev

创建一个实现派生类单例的基类

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何从另一个派生类对象调用派生类虚拟方法

来自分类Dev

CreateDelegate派生类必须提供一个实现

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在C ++中,是否可以使一个类从其成员类之一继承?

来自分类Dev

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

来自分类Dev

使用Castle.Windsor仅为派生类而不是基类注册一个拦截器

来自分类Dev

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

来自分类Dev

将指向一个派生类的指针传递给另一个

来自分类Dev

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

来自分类Dev

当我有两个函数时,为什么编译器不显示错误,一个将基类作为参数,一个将派生类作为参数?

来自分类Dev

对齐包含一个类的类

来自分类Dev

创建一个包含类的类

来自分类Dev

创建一个类实例作为另一个类的成员

来自分类Dev

成员函数(相对于整个类)是否可以成为一个函数/类的朋友?

Related 相关文章

  1. 1

    创建一个新的基 CDialogEx 派生类

  2. 2

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

  3. 3

    从派生类派生一个类

  4. 4

    如何禁止C ++派生类从基类派生,但允许另一个派生类

  5. 5

    可以在派生类中的operator <<调用C ++基类中的另一个operator <<吗?

  6. 6

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

  7. 7

    创建一个实现派生类单例的基类

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

    如何从另一个派生类对象调用派生类虚拟方法

  12. 12

    CreateDelegate派生类必须提供一个实现

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

    在C ++中,是否可以使一个类从其成员类之一继承?

  20. 20

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

  21. 21

    使用Castle.Windsor仅为派生类而不是基类注册一个拦截器

  22. 22

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

  23. 23

    将指向一个派生类的指针传递给另一个

  24. 24

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

  25. 25

    当我有两个函数时,为什么编译器不显示错误,一个将基类作为参数,一个将派生类作为参数?

  26. 26

    对齐包含一个类的类

  27. 27

    创建一个包含类的类

  28. 28

    创建一个类实例作为另一个类的成员

  29. 29

    成员函数(相对于整个类)是否可以成为一个函数/类的朋友?

热门标签

归档