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;
}
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;
}