弱弱问下
这里有几个问题!希望大虾指点一、二,能牺牲一下宝贵时间,说的仔细一点!谢谢!^_^
问题1:
#include <iostream.h>
class base
{
public:
void fun();
};
class derived:public base
{
public:
void fun(int a);
};
void base::fun()
{
cout<<"base::fun"<<endl;
}
void derived::fun(int a)
{
cout<<"derived::fun:"<<a<<endl;
}
void main()
{
base bobj1;
derived dobj;
base &bobj2 = dobj;
dobj.fun(10);
//dobj.fun();/*error C2660: 'fun' : function does not take 0 parameters*/
bobj2.fun();/*可以!base::fun*/
bobj1.fun();
}
这里派生类对象不能调用无参的fun函数,不明白是派生类没有继承到基类无参的fun函数?还是继承了不能调用?为什么??一个是有参一个是无参,为什么会屏蔽呢?
问题2:
#include <iostream.h>
class base
{
public:
virtual void fun();
virtual void fun1();
};
class derived:public base
{
public:
void fun(int a);
};
void base::fun()
{
cout<<"base::fun"<<endl;
}
void base::fun1()
{
cout<<"base::fun1"<<endl;
}
void derived::fun(int a)
{
cout<<"derived::fun:"<<a<<endl;
}
void main()
{
base bobj1;
derived dobj;
dobj.fun(10);
dobj.fun();/*error C2660: 'fun' : function does not take 0 parameters*/
dobj.fun1();/*right!base::fun1*/
bobj1.fun();
}
这里按理说派生类中应该自己会有代参的fun函数,并且继承了基类的virtual的无参fun函数,也就是说,派生类对象会含有一个指向虚函数表指针,指向虚函数表,这个虚函数表应该和基类相同才是!但是查看了一下对象的布局如下,不解!
-dobj {...}
--|-base {...}
----|-__vfptr 0x004270dc const derived::`vftable'
[0] 0x0040101e base::fun(void)
[1] 0x00401037 derived::fun(void)
-bobj1 {...}
--|-__vfptr 0x00426034 const base::`vftable'
[0] 0x0040101e base::fun(void)
[1] 0x00401037 derived::fun(void)
不解:基类虚函数表中怎么会没有fun1函数指针?怎么会有派生类函数derived::fun()指针?而且参数是空?!
问题3:
多态性是单纯指虚拟函数的应用,还是继承和虚拟函数所表现出来的逗都属于多态性的范畴?好多书本不太一致。我越看越糊涂啦!^_^