问题标签 [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.

0 投票
3 回答
3986 浏览

c++ - C++私有虚拟继承问题

在下面的代码中,C 类似乎无法访问 A 的构造函数,这是由于虚拟继承所必需的。然而,代码仍然可以编译和运行。为什么它有效?

此外,如果我从 A 中删除默认构造函数,例如

然后

会(出乎意料地)编译,但是

不会像预期的那样编译。

使用“g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)”编译的代码,但已验证它与其他编译器的行为相同。

0 投票
2 回答
9130 浏览

c++ - C++ 异常和来自 std::exception 的继承

鉴于此示例代码:

我得到以下输出:

然而,简单地继承my_exception_tfrom std::exception public,我得到以下输出:

有人可以向我解释为什么在这种情况下继承类型很重要吗?标准中参考的奖励积分。

0 投票
3 回答
1227 浏览

c++ - 错误的私有基类无法访问?

使用 g++ 4.2.1 编译此代码:

我得到:

但是,如果我将wrap_rep类更改为使用ST

它编译得很好。或者,如果我将原始代码更改为:

它也编译得很好。对我来说,原始代码看起来很好。这是一个 g++ 错误吗?如果不是,那为什么使用模板有效?而且,对于另一种情况,为什么有::S必要?

0 投票
2 回答
228 浏览

c++ - 私有继承和交换

我在两个非常相关的类的实现中使用私有继承。这using Base::X;是非常有用和优雅的。但是,我似乎找不到一个优雅的解决方案来重用基类的交换函数。

到目前为止,我唯一能想到的就是将 ' 的定义复制粘贴A::swapConst_A::swap' 的定义中,太糟糕了!

是否有一个优雅的解决方案来重用私有基类的交换?

有没有一种更简洁的方法来实现我在这里尝试做的事情(类的 const 包装器)?

0 投票
5 回答
228 浏览

c++ - C++ 中的同时私有和公共继承

假设一个类Y公开继承一个类X。一个类可以在公开继承的同时Z私下继承吗?YX

为了更清楚地说明这一点,假设X定义了公共方法x1x2. Y继承X、覆盖x1并提供方法y。C++ 是否允许第三个类ZY这样的方式进行子类化,即它Y的实现x1y私有可用,而外部世界只看到它X公开继承,即只有一个公共方法x2

0 投票
1 回答
322 浏览

c++ - 私有继承:名称查找错误

我有以下无法编译的代码示例:

gcc 打印的错误是:

test.cpp:6: 错误: `class my::base1' 不可访问

test.cpp:17:错误:在此上下文中

现在,我可以猜到问题出在哪里:当查看 的声明时print,编译器看到base1并认为:base1是 的基类子对象derived* this,但您无权访问它!虽然我打算这base1应该只是一个类型名称。

我如何在 C++ 标准中看到这是正确的行为,而不是编译器中的错误(我确信这不是错误;我检查过的所有编译器都是如此)?

我应该如何解决这个错误?以下所有修复都有效,但我应该选择哪一个?

无效打印(base1* 指针){}

无效打印(::my:: base1* 指针){}

类基1; 无效打印(base1* 指针){}


编辑:

0 投票
3 回答
4608 浏览

c++ - 何时在组合上使用 C++ 私有继承?

你能给我一个具体的例子,什么时候最好使用私有继承而不是组合?就个人而言,我将使用组合而不是私有继承,但在某些情况下,使用私有继承可能是解决特定问题的最佳解决方案。阅读C++ 常见问题,给你一个使用私有继承的例子,但我似乎更容易使用组合+策略模式甚至公共继承而不是私有继承。

0 投票
3 回答
268 浏览

c++ - 私有继承:如何创建基类的对象(具有纯虚方法)?

考虑以下代码:

在上面的代码中,我可以创建“派生”类型的对象。C++ 允许我从派生类中的“someMethod()”访问方法“methodDefinedInBase()”。但是,如何创建“Base”类型的对象?

谢谢,

毗湿奴。

0 投票
5 回答
859 浏览

c++ - 从抽象(纯虚拟)类私有继承有意义吗?

假设这个构造

现在,我想知道以这种方式从接口私有继承是否有任何有用的场景。

0 投票
3 回答
568 浏览

c++ - 具有私有基数的函数成员指针

以下代码产生编译时错误:

base::print” : 无法访问在类“ base_der”中声明的私有成员

但是,我已经public在派生类中创建了成员。为什么这不起作用?