繁体   English   中英

c ++基类和派生类约束

[英]c++ base class and derived class constraints

以下问题可能看似重复,但我无法在网站的其他任何地方找到确切的想法。

简要介绍:这个问题提出来,因为我试图理解我班级中更复杂的继承组合。

在我提出问题之前的一个注意事项 - 我不会寻找某种“解决方案”,只希望与您讨论该主题并获得更好的思考。

假设您有以下几行:

class C : public B 
{
    public : 
        C (const B& b) : B (b) {}
        B& operator*() {return *this;}
};

int main() {
    A* pA = new B();
    C& c = pA -> doIt();
    *c = *pA;
    c = *pA;
    return 1;
}

此代码未满,这是完整的目的 - 假设它在此代码中编译并提取约束。 我仍然不会只是写一个代码,并要求你解释头顶的任何约束,但我会添加我的concreate问题:

我们对以下行有什么限制:

C& c = pA -> doIt();

据我所知,上面的代码有一个凝视约束,这是这些类的层次结构顺序:C是B的派生,B是A的派生(纠正我,如果我错了..)

我试图在保持上面描述的层次结构的同时实际定义这些类,并且我不能让doIt()返回其派生类C的类型。我可以在A函数的原型中使用不完整类型C&但是我无法返回C类型的对象。

提前谢谢,SyndicatorBBB

尝试这个:

class C;

struct A
{
    C & doIt();
};

struct B : A
{
  void operator=(A const &) { }
};

class C : public B
{
public :
    using B::operator=;
    C (const B & b) : B(b) {}
    B & operator*() { return *this; }
};

C & A::doIt()
{
    static B bimpl;
    static C cimpl(bimpl);
    return cimpl;
}

请注意,隐式赋值运算符隐藏了基本版本,因此我们需要using明显式取消隐藏运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM