C++多态、函数调​​用

标签 c++ polymorphism containers

好吧,作为一名程序员,我还很缺乏经验,更不用说 C++ 了,所以请多多包涵。我想做的是让一个容器类持有一个父类指针,然后使用多态性来存储一个子类对象。问题是我想通过父类指针调用子类的函数之一。这是我在代码中的意思的一种示例:

class SuperClass
{
public:
    int x;
}

class SubClass : public SuperClass
{
public:
    void function1()
    {
        x += 1;
    }
}

class Container
{
public:
    SuperClass * alpha;
    Container(SuperClass& beta)
    {
        alpha = beta;
    }
}

int main()
{
    Container cont = new Container(new SubClass);
}

(我不确定那是对的,我仍然对指针非常不可靠。我希望它至少能说明问题。)

所以,我不完全确定我是否能做到这一点。我暗暗怀疑答案是否定的,但我想确定一下。如果有人有其他方法来完成这类事情,我会很高兴听到。

最佳答案

绝对有可能。只需对您的代码进行一些小的更改就可以使它正常工作。 您需要将基类 (SuperClass) 更改为具有与派生类 (SubClass) 具有相同“签名”的虚方法。您还需要更改 Container 构造函数以获取指向 SuperClass 的指针而不是引用。我相信这就是让它发挥作用所必需的一切。

编辑:尝试在评论中包含建议。好点。希望我没有把事情搞得太糟!

class SuperClass
{
public:
    int x;

    // virtual destructor ensures that the destructors of derived classes are also
    // invoked
    virtual ~SuperClass() { }

    // abstract virtual method to be overriden by derived classes
    virtual void function1() = 0;
}

class SubClass : public SuperClass
{
public:
    ~SubClass()
    {
    }

    void function1()
    {
        x += 1;
    }
}

class Container
{
public:
    SuperClass * alpha;
    Container(SuperClass* beta)
    {
        alpha = beta;
    }

    ~Container()
    {
       // Note, this will invoke the destructor of the SubClass class because 
       // SuperClass's destructor is marked as virtual.
       delete alpha;
    }
}

int main()
{
    Container* cont = new Container(new SubClass());
    delete cont;
}

关于C++多态、函数调​​用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2502107/

相关文章:

docker - 使Docker容器保持事件状态并运行Java应用程序

c++ - 如何使用cpp的regex_iterator在第一次匹配时停止

c++ - 如何在 C++ 中复制 std::string 类型的字符串?

java - 避免嵌套 If Else/Switch - Java

java - 继承不允许我创建子类的对象?

haskell - 如何在应用类型默认规则的 ghci 中打印多态函数(或值)的类型?

c++ - 如何在 ubuntu 20.04 中安装编译器 g++-4.8.5

c++ - 在另一个类中创建类对象数组

Java Servlet 容器性能?

css - 列图像全宽响应