1。类成员函数的重载解析之前先进行名字解析2。普通继承层次不存在优先级3。虚拟继承存在的个优先级,首先需的后续的概念
<1>
class A{public: void ok(int){cout << "A::okokok" << endl;}};class B:public A{public: void ok(){cout << "B::okokok" << endl;}};class C:public B{};int main(){ C c; c.ok(); //B::ok return 0;}
<2>
class A{public: void ok(int){cout << "A::okokok" << endl;}};class B:public A{public: using A::ok; void ok(){cout << "B::okokok" << endl;}};class C:public B{};int main(){ C c; c.ok(); c.ok(3); return 0;}
<3>
C是A的后续类,改写之,具优先级所以不二义
class A{public: void ok(){cout << "A::okokok" << endl;}};class B:virtual public A{};class C:virtual public A{public:// using A::ok; void ok(int){cout << "C::okokok" << endl;}};class D:public B, public C{};int main(){ D d; d.ok(); d.ok(3); return 0;}
<4>
C并非A的后续类,不存改写说法,二义
class A{public: void ok(){cout << "A::okokok" << endl;}};class B:virtual public A{};class C:public A{public: void ok(int){cout << "C::okokok" << endl;}};class D:public B, public C{};int main(){ D d; d.ok(); //err d.ok(3); //err return 0;}
转载请注明原文地址: https://ibbs.8miu.com/read-12389.html