问题标签 [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++ - C++私有虚拟继承问题
在下面的代码中,C 类似乎无法访问 A 的构造函数,这是由于虚拟继承所必需的。然而,代码仍然可以编译和运行。为什么它有效?
此外,如果我从 A 中删除默认构造函数,例如
然后
会(出乎意料地)编译,但是
不会像预期的那样编译。
使用“g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)”编译的代码,但已验证它与其他编译器的行为相同。
c++ - C++ 异常和来自 std::exception 的继承
鉴于此示例代码:
我得到以下输出:
然而,简单地继承my_exception_t
from std::exception
public
,我得到以下输出:
有人可以向我解释为什么在这种情况下继承类型很重要吗?标准中参考的奖励积分。
c++ - 错误的私有基类无法访问?
使用 g++ 4.2.1 编译此代码:
我得到:
但是,如果我将wrap_rep
类更改为使用ST
:
它编译得很好。或者,如果我将原始代码更改为:
它也编译得很好。对我来说,原始代码看起来很好。这是一个 g++ 错误吗?如果不是,那为什么使用模板有效?而且,对于另一种情况,为什么有::S
必要?
c++ - 私有继承和交换
我在两个非常相关的类的实现中使用私有继承。这using Base::X;
是非常有用和优雅的。但是,我似乎找不到一个优雅的解决方案来重用基类的交换函数。
到目前为止,我唯一能想到的就是将 ' 的定义复制粘贴A::swap
到Const_A::swap
' 的定义中,太糟糕了!
是否有一个优雅的解决方案来重用私有基类的交换?
有没有一种更简洁的方法来实现我在这里尝试做的事情(类的 const 包装器)?
c++ - C++ 中的同时私有和公共继承
假设一个类Y
公开继承一个类X
。一个类可以在公开继承的同时Z
私下继承吗?Y
X
为了更清楚地说明这一点,假设X
定义了公共方法x1
和x2
. Y
继承X
、覆盖x1
并提供方法y
。C++ 是否允许第三个类Z
以Y
这样的方式进行子类化,即它Y
的实现x1
和y
私有可用,而外部世界只看到它X
公开继承,即只有一个公共方法x2
?
c++ - 私有继承:名称查找错误
我有以下无法编译的代码示例:
gcc 打印的错误是:
test.cpp:6: 错误: `class my::base1' 不可访问
test.cpp:17:错误:在此上下文中
现在,我可以猜到问题出在哪里:当查看 的声明时print
,编译器看到base1
并认为:base1
是 的基类子对象derived* this
,但您无权访问它!虽然我打算这base1
应该只是一个类型名称。
我如何在 C++ 标准中看到这是正确的行为,而不是编译器中的错误(我确信这不是错误;我检查过的所有编译器都是如此)?
我应该如何解决这个错误?以下所有修复都有效,但我应该选择哪一个?
无效打印(类base1* 指针){}
无效打印(::my:: base1* 指针){}
类基1; 无效打印(base1* 指针){}
编辑:
c++ - 何时在组合上使用 C++ 私有继承?
你能给我一个具体的例子,什么时候最好使用私有继承而不是组合?就个人而言,我将使用组合而不是私有继承,但在某些情况下,使用私有继承可能是解决特定问题的最佳解决方案。阅读C++ 常见问题,给你一个使用私有继承的例子,但我似乎更容易使用组合+策略模式甚至公共继承而不是私有继承。
c++ - 私有继承:如何创建基类的对象(具有纯虚方法)?
考虑以下代码:
在上面的代码中,我可以创建“派生”类型的对象。C++ 允许我从派生类中的“someMethod()”访问方法“methodDefinedInBase()”。但是,如何创建“Base”类型的对象?
谢谢,
毗湿奴。
c++ - 从抽象(纯虚拟)类私有继承有意义吗?
假设这个构造
现在,我想知道以这种方式从接口私有继承是否有任何有用的场景。
c++ - 具有私有基数的函数成员指针
以下代码产生编译时错误:
“
base::print
” : 无法访问在类“base_der
”中声明的私有成员
但是,我已经public
在派生类中创建了成员。为什么这不起作用?