gpt4 book ai didi

c++ - 派生类构造函数参数无法访问 protected 基类成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:20 25 4
gpt4 key购买 nike

<分区>

我有两个这样定义的类:

class A {
A(A& a) { ... } // deep copy
<dtor + methods>
protected:
A(std::shared_ptr<AImpl>& pp) : p(pp) { /* empty */ }
std::shared_ptr<AImpl> p; // the only member variable of A
}
class B : public A {
explicit B(const A& a) : A(a.p) { /* empty */ } // KO
// OR
explicit B(const A& a) { p = a.p; } // KO
// OR
explicit B(const A& a) : p(a.p) { /* empty */ } // obviously KO
<members, ...>
}

注意:

A(A& a)正在对 p 指向的对象进行深拷贝,这不是我需要的,所以我实现了 A(std::shared_ptr<AImpl>&)初始化 A::p使用共享指针本身的拷贝来共享所有权。

我无法为 A::p 定义 setter因为AImpl不能是公共(public)类型并且必须保留在类 A 的范围内或其子类(接口(interface)-实现类分离设计)。

问题:

我在上面提到的所有构造函数风格上都有一个编译错误,说 p不可访问,因为它在基类中受到保护,但为什么呢?

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