~~~~~~C++~~~~~指针~~~~

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:33:51
知道如果是 早期联编 的话就不能通过 基类指针 来实现对派生类的调用,因为C++的静态绑定机制在编译时就确定了指针和基类成员函数的关系.
eg:
class A
{....show().....};//show()输出2个数
class B:public A
{....show().....};//show()输出3个数,其中2个为基类中继承的
void mian()
{
A a(....);//2个参数
B b(....);//3个参数
A*q;
q=&a;
q->show();
q=&b;
q->show();
}
结果是两个都是用基类的show()输出的;
我想知道,难道说在没声明虚函数的情况下,指针在初始化后就固定不变了吗?为什么把派生类对象地址赋给它也没用呢?是因为有 A*q 在吗?那又是为什么把show()声明为虚函数时就能达到目的呢?基类的指针为什么能访问派生类的函数?基类指针和基类又有什么关系,她是它的成员吗?思路好乱!!!who看帮我讲讲啊~~~~~最好是就这题多说点关于虚函数和指针间关系的~~谢谢了

在没有声明虚函数的情况下,
A*q;
q=&a;
是无法用基类的指针访问到派生类的函数。

引入虚函数的目的就是要用基类的指针或者引用去访问派生类的重载函数。
实际的结果就是更加方便操作,在main()里面可以结构化的操作

当在基类声明一个虚函数时,在private里会生成一个表。派生类会继承这个表,并且修改这个表。这个表存放地址。