- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三个名为 A、B 和 C 的类。B 继承自 A,C 继承自 B。(A -> B -> C)。
我还有一个名为 IBinary 的抽象基类。我想让所有的类都实现 IBinary 接口(interface)。当我让 A 类继承自 IBinary 时,我的代码输出是 C::readb
。当A类不继承IBinary时,输出为B:readb
。
让我的三个类订阅同一个接口(interface)的正确方法是什么?如果我只有顶级类 (A) 从接口(interface)类继承,我将需要重构我的代码,这样我就不会遇到像上面那样的解析问题。
如果我明确地让所有类都继承自接口(interface)类,那么我将拥有一个更复杂的类层次结构,并且更接近于拥有一颗死亡钻石。
#include <iostream>
class IBinary {
public:
virtual void readb( std::istream& in ) = 0;
};
// Basic A -- change whether this inherits from IBinary
class A : public IBinary {
public:
A() {};
void readb( std::istream& in ) {}
};
// Specialized A
class B : public A {
public:
B() {};
void load() {
this->readb(std::cin); // <-- which readb is called?
}
void readb( std::istream& in ) {
std::cout << "B::readb" << std::endl;
}
};
// Specialized B
class C : public B {
public:
C() {};
void readb( std::istream& in ) {
std::cout << "C::readb" << std::endl;
}
void foo() {
B::load();
}
};
int main() {
C c;
c.foo();
}
最佳答案
IBinary::readb
定义中的virtual
使一切变得不同。
当您从 IBinary
继承时,层次结构中覆盖 IBinary
的所有 readb
也是隐式虚拟的。所以虚拟调度开始了,就像它应该的那样。
如果您不这样做,则调用将静态解析。因为调用在 B
内部,所以调用的是 B::readb
。
关于c++ - 适当的继承设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002533/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!