覆盖虚函数而不是纯虚函数?
Overriding a virtual function but not a pure virtual function?
我试图从两个 class 中推导出 class C
,A
和 B
;阅读 后,我尝试编写 using B::<function>
以便使用 B
.
中的实现覆盖 A
中的纯虚函数
但是,该答案中的方法不适用于 纯 虚函数;在那种情况下,我发现我需要更明确。
那么明明 using
可以解决歧义,却不能引入实现?
我只是希望更好地了解这里发生的事情。
struct A {
// this would result in ambiguity:
//virtual void e(void) const {} // ERROR: member 'e' found in multiple base classes
// resolving ambiguity with 'using'
virtual void f(void) const {} // OK
// this would result in an unimplemented method:
//virtual void g(void) const = 0; // ERROR: variable type 'C' is an abstract class
// *** why doesn't this work? ***
//virtual void h(void) const = 0; // ERROR: variable type 'C' is an abstract class
// resolving ambiguity by explicitly defining what I want
virtual void i(void) const = 0; // OK
};
struct B {
void e(void) const {}
void f(void) const {}
void g(void) const {}
void h(void) const {}
void i(void) const {}
};
struct C : public A, public B {
using B::f; // sufficient to pin down 'f'
using B::h; // not sufficient to pin down 'h'
void i(void) const { B::i(); } // sufficient to pin down 'i'
};
int main() {
C X;
X.e();
X.f();
X.g();
X.h();
X.i();
}
I attempted to write using B::<function>
in order to override a pure
virtual function in A with the implementation in B.
你误会了。用这种方式 覆盖 函数是不可能的。 using B::h;
所做的一切:它将 B::h
引入 struct C
的范围,因此 main()
中的 X.h();
等同于 X.B::h();
。所以,A::h()
仍然是纯虚拟的,因此你不能实例化 struct C
.
我试图从两个 class 中推导出 class C
,A
和 B
;阅读 using B::<function>
以便使用 B
.
A
中的纯虚函数
但是,该答案中的方法不适用于 纯 虚函数;在那种情况下,我发现我需要更明确。
那么明明 using
可以解决歧义,却不能引入实现?
我只是希望更好地了解这里发生的事情。
struct A {
// this would result in ambiguity:
//virtual void e(void) const {} // ERROR: member 'e' found in multiple base classes
// resolving ambiguity with 'using'
virtual void f(void) const {} // OK
// this would result in an unimplemented method:
//virtual void g(void) const = 0; // ERROR: variable type 'C' is an abstract class
// *** why doesn't this work? ***
//virtual void h(void) const = 0; // ERROR: variable type 'C' is an abstract class
// resolving ambiguity by explicitly defining what I want
virtual void i(void) const = 0; // OK
};
struct B {
void e(void) const {}
void f(void) const {}
void g(void) const {}
void h(void) const {}
void i(void) const {}
};
struct C : public A, public B {
using B::f; // sufficient to pin down 'f'
using B::h; // not sufficient to pin down 'h'
void i(void) const { B::i(); } // sufficient to pin down 'i'
};
int main() {
C X;
X.e();
X.f();
X.g();
X.h();
X.i();
}
I attempted to write using
B::<function>
in order to override a pure virtual function in A with the implementation in B.
你误会了。用这种方式 覆盖 函数是不可能的。 using B::h;
所做的一切:它将 B::h
引入 struct C
的范围,因此 main()
中的 X.h();
等同于 X.B::h();
。所以,A::h()
仍然是纯虚拟的,因此你不能实例化 struct C
.