问题标签 [private-inheritance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 私有继承和从函数返回引用
现在我有下面的代码:
它运行良好。稍后我添加了一些代码。
然后VS2010会告诉编译器错误:错误C2243:'type cast':从'CEnv *'到'Env&'的转换存在,但无法访问。
在我看来,显示错误是正确的,因为如果使用私有继承,它就不是一种关系。但是第一个 Code Pattern 运行良好。我想知道为什么?
c++ - 如何最好地将私有继承暴露给基类?
我正在设计一个对象层次结构,其中所有对象的基类都是Node
,预计将被子类化。的子类Node
将包含子项,但子项的类型可能因子类而异。
我通过从Owner<>
类中私有继承来实现子项的所有权,这只是std::vector
. 我想将此所有权公开给基类(但没有其他人),因为在添加和删除子项方面有很多重复。所以我想出了这个:
这种方法感觉有点混乱,因为我在基类中存储了对派生类的引用(我以前从未见过)。这是好习惯吗?在处理基类中的通用子维护时,是否有更好的方法来保持派生类中的子所有权?
c++ - 绑定到私有继承的成员函数
我想要std::bind
一个来自私有基类的成员函数,using
在派生类中使用 -declaration 将其设为“公共”。直接调用该函数有效,但似乎绑定或使用成员函数指针无法编译:
查看上面的错误消息,问题似乎Derived::foo
仍然只是Base::foo
,我无法Base
通过Derived
外部访问Derived
。
这似乎不一致 - 我应该不能互换使用直接调用、绑定函数和函数指针吗?
是否有一种解决方法可以让我绑定到foo
一个Derived
对象,最好不更改Base
或Derived
(在我不拥有的库中)?
c++ - 当我们想私下继承基类时,为什么要进行名称公开?
通常,我们希望使用私有继承来隐藏基类的实现细节。如果这是真的,
1) 为什么又出现了姓名公示功能?它只是为了语言的完整性还是有任何实际用途?
2)即使我公开了基类函数名,派生类仍然可以声明另一个同名函数。请考虑以下代码。
在上面的代码片段中,即使我们公开了名称,我们仍然可以在派生类中声明名称,并且可以访问成员变量的基类版本。内存是如何管理的?
谢谢你。
c++ - 使用声明的奇怪行为
请看下面的代码
所有 gcc 6.1、clang 3.8 和 msvc 2015 update 3 都拒绝编译它,因为A
它不是内部的可访问名称,C
因为A
它是B
. 似乎 gcc 认为A
inusing base_type = A
指的是A
. msvc 和 clang 似乎没有。
也许编译错误是由于继承触发的名称注入(因为修改using base_type = A
为using base_type = ::A
使所有编译器都能正常工作),但我想知道这个奇怪的错误是否是标准所说的。
更具体地说,
- 据我了解, not like
A::type
只是A
一个类名(尽管 gcc 将其误解为函数名),它被引入C
not insideA
norB
。为什么这个名字被认为是私有的B
? - 这个编译错误应该被认为是一个错误,还是标准规范的边缘情况?
c++ - 如何转换为私有派生的子类型?
以下是实现具有修改语义的共享指针的尝试operator==
:
我正在努力实现std::make_shared
这种类型的等价物。这是我的尝试:
这不起作用:编译器 ( g++ 5.4.0
) 抱怨无效转换。为什么它不起作用,我应该怎么做而不是这个演员?
c++ - 三个显式向上转换到私有基类之间的区别
我在私有继承的基类对象和子对象之间有以下三个类型转换,其中两个有效,但最后一个无效。我想知道是什么导致了不同的结果。
与 '*this'不a
一样 - 因为两者都是对象?那么为什么 No.1 有效呢?
如果是因为范围,那么为什么 No.2 有效?任何人都可以解释一下它们背后的机制吗?
此外,第一种方法似乎是创建一个字符串对象。在私有继承的情况下,不能将基类引用设置为派生类对象。那么临时字符串对象是如何创建的呢?
提前致谢。
c++ - 如何从私有基类调用静态方法?
由于第三方库的布局,我有如下代码:
我在使用 MSVC 时收到编译器错误 C2247:
Base::SomeStaticMethod 不可访问,因为 Derived1 使用 private 从 Base 继承。
我知道由于 private 说明符,我无法通过继承访问Base
成员Derived2
,但我仍然应该能够调用 - 的静态方法,而不管andBase
之间的任何继承关系。
如何解决歧义并告诉编译器我只是在调用静态方法?Base
Derived2
c++ - std::enable_shared_from_this;公共与私人
我使用 shared_ptr 和 enable_shared_from_this 玩了一会儿,但遇到了一些我不太了解的东西。
在我的第一次尝试中,我构建了这样的东西:
请注意,此类正在私下扩展 std::enable_shared_from_this。这显然有很大的不同,因为执行这样的事情:
引发 bad_weak_ptr 异常。好像我将类定义更改为从 std::enable_shared_from_this 公开的固有的,这只是查找。
为什么会这样,我在这里想念什么?并且没有办法让它适用于私有继承,因为 shared_test 类的“外部世界”不需要知道它正在启用共享......(至少,如果你问我,还是我又错过了什么?)