1。对于一个对象,对象的指针,引用
它的可用成员函数范围:由静态类型给出
它的使用函数范围:由动态类型给出
2。pb的静态类型是B*,所以它 能使用的范围是B的成员函数,所以f3()不能使用
rb相同道理
3。pb 实际所使用的版本,由动态类型给出,D,所以f1()是D类版本
class B
{
public:
virtual void f1(){cout << "B::f1" << endl;}
void f2(){cout << "f2" << endl;}
};
class D:public B
{
public:
virtual void f1(){cout << "D::f1" << endl;}
void f3(){cout << "f3" << endl;}
};
int main()
{
B *pb = new D;
pb -> f1();
pb -> f2();
// pb -> f3(); //err
B& rb = *pb;
rb.f1();
rb.f2();
// rb.f3(); //err
D d;
d.f1();
d.f2();
d.f3();
delete pb;
return 0;
}
它的可用成员函数范围:由静态类型给出
它的使用函数范围:由动态类型给出
2。pb的静态类型是B*,所以它 能使用的范围是B的成员函数,所以f3()不能使用
rb相同道理
3。pb 实际所使用的版本,由动态类型给出,D,所以f1()是D类版本
class B
{
public:
virtual void f1(){cout << "B::f1" << endl;}
void f2(){cout << "f2" << endl;}
};
class D:public B
{
public:
virtual void f1(){cout << "D::f1" << endl;}
void f3(){cout << "f3" << endl;}
};
int main()
{
B *pb = new D;
pb -> f1();
pb -> f2();
// pb -> f3(); //err
B& rb = *pb;
rb.f1();
rb.f2();
// rb.f3(); //err
D d;
d.f1();
d.f2();
d.f3();
delete pb;
return 0;
}