C ++-更改基类指向的对象(在操作员oveloading函数中返回对基类的引用)

男子

我有一门抽象课

class Abs{
    //...
    public:
    virtual Abs& operator--() = 0;
    virtual void print() = 0;
};

和两个子类

class Sub1: public Abs{
    //...
    public:
    Abs& operator--() {return *this} //this is just to prevent
                     //Sub1 to become an abstract class
    void print() {cout<<"Sub1"<<endl;}      
};

class Sub2: public Abs{
    //...
    public:
    Abs& operator--() {...}          //here is an issue
    void print() {cout<<"Sub2"<<endl;}
};

是否有可能在Sub2中重载运算符-以便在主函数ptr中现在指向类型为Sub1的对象?

int main()
{
    Abs* ptr;
    Sub2 sub2;
    ptr=&sub2;

    ptr->print(); //this should print "Sub2"

    --(*ptr);

    ptr->print(); //this should print "Sub1"

    return 0;
}
他们是

首先,您的要求很尴尬,真正的答案是:重新考虑您要做什么。

基本上,您要提供的是一种更改成员函数的方法,this以便使其指向另一个对象(因为您不能更改对象的类型)。这是不可能的。

一种更合理的解决方案是避免直接使用多态性,并让尖的对象包含一个指向Sub1的字段Sub2然后,使该指针对象将调用直接指向该字段。这样,您可以更改正在使用的有效类型,而不会遇到语言限制。请注意,指向的对象当然不是Abs,而是其他一些类型。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++:从模板化的基类覆盖函数

来自分类Dev

C ++多重继承,与派生对象中基类的地址混淆

来自分类Dev

在C#中通过驱动的B类对象访问基类A函数

来自分类Dev

基类的c ++构造函数

来自分类Dev

C ++中基类指针引用的对象的打印类型?

来自分类Dev

在C ++继承中,当指向基类的指针对象指向派生类时,不调用派生类析构函数

来自分类Dev

C ++调用基类方法slices对象

来自分类Dev

限制C ++中虚拟基类的对象共享

来自分类Dev

指向派生类对象的C ++基类指针不调用派生相等运算符函数

来自分类Dev

C ++继承:调用重载的基类函数

来自分类Dev

C ++从基类派生调用覆盖的函数

来自分类Dev

C#-在派生类中调用基类和类构造函数

来自分类Dev

类型“类名”不提供呼叫操作员。C ++

来自分类Dev

C ++元函数从模板化的基类中检索constexpr

来自分类Dev

C#如何从基类引用继承的类

来自分类Dev

返回派生类型的基类中的C#方法

来自分类Dev

在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

来自分类Dev

通过类函数返回引用并在c ++中返回整个对象?

来自分类Dev

当在C ++中获得指向基类的指针时,为什么不为派生类对象调用重载函数?

来自分类Dev

在C ++中由基类指针引用的对象的打印类型?

来自分类Dev

C ++调用从基类派生的函数

来自分类Dev

派生类函数参数作为基类引用导致C2678

来自分类Dev

限制C ++中虚拟基类的对象共享

来自分类Dev

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

来自分类Dev

子类中的C ++基类函数重载

来自分类Dev

如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

来自分类Dev

在基类中的c ++不可访问的构造函数

来自分类Dev

在C++中,有没有办法区分基类指针指向的实例类?

来自分类Dev

在 C++ 中覆盖函数时如何选择基类?

Related 相关文章

  1. 1

    C ++:从模板化的基类覆盖函数

  2. 2

    C ++多重继承,与派生对象中基类的地址混淆

  3. 3

    在C#中通过驱动的B类对象访问基类A函数

  4. 4

    基类的c ++构造函数

  5. 5

    C ++中基类指针引用的对象的打印类型?

  6. 6

    在C ++继承中,当指向基类的指针对象指向派生类时,不调用派生类析构函数

  7. 7

    C ++调用基类方法slices对象

  8. 8

    限制C ++中虚拟基类的对象共享

  9. 9

    指向派生类对象的C ++基类指针不调用派生相等运算符函数

  10. 10

    C ++继承:调用重载的基类函数

  11. 11

    C ++从基类派生调用覆盖的函数

  12. 12

    C#-在派生类中调用基类和类构造函数

  13. 13

    类型“类名”不提供呼叫操作员。C ++

  14. 14

    C ++元函数从模板化的基类中检索constexpr

  15. 15

    C#如何从基类引用继承的类

  16. 16

    返回派生类型的基类中的C#方法

  17. 17

    在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

  18. 18

    通过类函数返回引用并在c ++中返回整个对象?

  19. 19

    当在C ++中获得指向基类的指针时,为什么不为派生类对象调用重载函数?

  20. 20

    在C ++中由基类指针引用的对象的打印类型?

  21. 21

    C ++调用从基类派生的函数

  22. 22

    派生类函数参数作为基类引用导致C2678

  23. 23

    限制C ++中虚拟基类的对象共享

  24. 24

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

  25. 25

    子类中的C ++基类函数重载

  26. 26

    如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

  27. 27

    在基类中的c ++不可访问的构造函数

  28. 28

    在C++中,有没有办法区分基类指针指向的实例类?

  29. 29

    在 C++ 中覆盖函数时如何选择基类?

热门标签

归档