gpt4 book ai didi

C++实现扩展子接口(interface)的子类而不覆盖已经覆盖的方法

转载 作者:行者123 更新时间:2023-11-27 23:08:06 25 4
gpt4 key购买 nike

我创建了扩展 C++ 中其他接口(interface)的接口(interface)(抽象类),我尝试实现它们,但在编译时出现错误。

错误如下:

main.cpp: In function 'int main()':
main.cpp:36:38: error: cannot allocate an object of abstract type 'Subclass'
Subclass * subObj = new Subclass();
^
Subclass.h:13:7: note: because the following virtual functions are pure within 'Subclass':
class Subclass : SubInterface {
^
SuperInterface.h:13:18: note: virtual void SuperInterface::doSomething()
virtual void doSomething()=0;

这是我的来源:

#include <iostream>

class SuperInterface {
public:
virtual void doSomething() = 0;
protected:
int someValue;
};

class SubInterface : public SuperInterface {
public:
virtual void doSomethingElseThatHasNothingToDoWithTheOtherMethod() = 0;
protected:
int anotherValue;
};

class Superclass : public SuperInterface {
public:
Superclass() {}
virtual ~Superclass() {}
void doSomething() {std::cout << "hello stackoverflow!";}
};

class Subclass : public SubInterface {
public:
Subclass() {}
virtual ~Subclass() {}
void doSomethingElseThatHasNothingToDoWithTheOtherMethod() {std::cout << "goodbye stackoverflow!";}

};

int main(void)
{
Superclass * superObj = new Superclass();
Subclass * subObj = new Subclass();
}

这是我想要的:我希望我的实现是已知的,因此具有与已经覆盖的方法相同的行为(例如 subObj->doSomething() 方法无需再次实现它即可工作)。如果可能的话,谁能告诉我应该怎么做才能实现这一目标?谢谢。

最佳答案

不,你不能通过简单的继承来做你想做的事。 Subclass 在任何时候都不会继承或提供 doSomething() 的实现,因此您不能随心所欲地调用 subObj->doSomething()。您必须遵守 subInterface 的接口(interface)协定。

您可以从 SuperclassSubinterface 继承 Subclass,并且只需将 doSomething() 实现为一种代理,Superclass::doSomething()。您仍然需要一个实现,但您不必“重新实现”它。

关于C++实现扩展子接口(interface)的子类而不覆盖已经覆盖的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21891236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com