【问题标题】:Child class as return type for a class method子类作为类方法的返回类型
【发布时间】:2010-08-06 17:44:30
【问题描述】:

我有一个要被继承的 C++ 类。它的所有子代都将继承一个方法:

class Record {
public:
    RETTYPE* all();
};

class Child : public Record {
    int age;
    char *name;
};

int main() {
    Child boo;
    Child boos* = boo->all(); // Pointer to array of Children
    return 0;
};

如何让方法返回(指向)自身?我不能只说Record all(); 因为Child 不是Record。永远不会在Record 上调用该方法。总是在继承自 Record 的某个类上。

【问题讨论】:

  • 是您必须告诉我们为什么将方法 all() 放到基类中。做什么的?如果只是为了代码重用,我认为你应该重新考虑。如果对于某些多态行为使其成为虚拟的。 Child 是 Record 的一种类型,因此它可以返回 Record* 但 C++ 支持返回类型协方差

标签: c++ class methods


【解决方案1】:

这是一种方法

class Record {

};

template<class T>
class RecordOf : public Record {
public:
    T* all();
};

class Child : public RecordOf<Child> {
    int age;
    char *name;
};

现在每个子类都有一个返回确切类型的 all 方法。您可以将具有相同签名的虚拟方法放在Record 的子类中,将依赖于确切类型的方法放在RecordOf 中。

这就是奇怪重复的模板模式

http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2021-04-05
    • 2015-07-18
    相关资源
    最近更新 更多