一个函数的动态绑定要满足3点要求:
1.通过指针调用vptr(this指针)
2.指针有做向上转型(指向子类对象,应为只有这样才会是虚函数)
3.基类要由virtual关键字
动态绑定
((p->vptr)[n])(p);
(p->vptr[n])(p);
成员函数的const
class test {
public:
void Afunt() const {
cout << "调用const A" << endl;;
};
void Afunt() {
cout << "调用 A" << endl;
};
void Bfunt()const{
cout << "调用 B" << endl;
}
void Cfunt() {
cout << "调用 C" << endl;
}
};
int main() {
test a;
a.Afunt();// "调用 A"
a.Bfunt();//"调用const A"
const test b;
b.Afunt();//"调用const B"
b.Cfunt();// 错误无法调用,因为const对象无法调用非const成员函数。
}