gpt4 book ai didi

c++ - 返回不同的子类型C++

转载 作者:行者123 更新时间:2023-12-02 10:21:27 27 4
gpt4 key购买 nike

来自Java背景,我在理解c++的继承功能时遇到了麻烦。我正在尝试根据函数内部的一些逻辑编写一个返回不同子类型的类。代码说明得更好:

父类(super class)型

class SuperType {

public:

virtual SuperType * functionA() const = 0;
};

子类型A.h
class SubTypeA : public SuperType{

public:

SuperType * functionA() const override;
};

亚型A.cpp
SuperType * SubTypeA::functionA() const {

if(someassertionIsTrue()){
return new SubTypeA();
}else{
return new SubTypeB();
}
}

子类型B.h
class SubTypeB : public SuperType{

public:

SuperType * functionA() const override;
};

子类型B.cpp
SuperType * SubTypeB::functionA() const {

if(someassertionIsTrue()){
return new SubTypeA();
}else{
return new SubTypeB();
}
}

我在 return new SubTypeB行中收到一条错误消息:
Cannot initialize return object of type 'SuperType *' with an rvalue of type 'SubTypeB *'
所以问题:
  • 这种类型的逻辑在c++中甚至可能吗?
  • 如果是,怎么办?
  • 最佳答案

    如果只是想解决编译问题。检查是否在SubTypeB.h中包括了SubTypeA.cpp,在SubTypeA.h中包括了SubTypeB.cpp

    您可能想解决您可能遇到的潜在问题。
    您要在SubTypeB中创建SubTypeA类型的对象,反之亦然。因此,类SubTypeA需要SubTypeB进行编译,而SubTypeB需要SubTypeA。因此,您有一个循环依赖性,这几乎总是您必须解决的设计缺陷。由于 header 中的定义不依赖于其他类,因此可以将其编译,但是将来可能会改变。

    如何解决此缺陷取决于您要执行的操作以及此构造是否有意义。您可以编写第三类,也可以编写一个函数来实现functionA的逻辑并根据情况创建两个SubTypes之一。

    关于c++ - 返回不同的子类型C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928006/

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