f(const A &);//(1)
f(const B &)//(2)
class A
{
A(int);
}
class B
{
B(int);
}
int a = 9;
f(a); // 这里就有二义性
a 既可以调用 (1) ,也可以调用 (2),二义性。当然我们都可以显示的指出来,来消灭二义性。
2:如何判断二义性:
通过列出从源到目标的转换路径,然后比较级别,如果最合适的路径,最高级别的路径有两条及两条以上,则有二义性。
3:表达式中运算符的函数候选集,包括成员函数和非成员函数。
4:如果我们在类中重载了运算符,同时有定义了目标是算术类型的类型转换,那么就存在重载运算符和内置运算符的二义性问题。详见page522;
5:基类一般定义所有类都有的共同属性,虚函数就实现了基类和子类的区别。
6:子类的虚函数如果重新定义,那么子类就会调用自己的函数,如果没有定义,那么就调用父类的。
7:在使用基类的引用或指针调用一个虚函数时会发生动态绑定。
8: