虚函数(1)

来源:互联网 发布:ip网络数字广播 编辑:程序博客网 时间:2024/06/14 02:57

今天看c++编程思想中所讲的虚函数,看的不是很懂,网上查了一下,发现这个图比较易懂

也就是virtual int fun0();virtual int fun1();所以不管一个还是两个虚函数,他的基类大小都要增加一个指针类型大小 ,也就是 4字节。

还有就是这个

class A
{
public:
int fun()
{
cout<<"hello"<<endl;
return 0;
}
private:
int x;
};
class B :public A
{
private:
int j;
public:
int fun()
{
cout<<"world"<<endl;
return 0;
}
};
int fun1(A *c)
{
c->fun();
return 0;
}
int main()
{
A b;
b.fun();
B c;
c.fun();
fun1(&b);
fun1(&c);
return 0;
}

当基类中的fun不是虚函数石,fun1(&b);fun1(&c);都打印的hello,基类类型指针可以指向基类,也可以指向派生类。

但是当把基类中的fun函数变为虚函数,形如如下:

class A
{
public:
virtual int fun()
{
cout<<"hello"<<endl;
return 0;
}
private:
int x;
};
class B :public A
{
private:
int j;
public:
 int fun()
{
cout<<"world"<<endl;
return 0;
}
};
int fun1(A *c)
{
c->fun();
return 0;
}
int main()
{
A b;
b.fun();
B c;
c.fun();
fun1(&b);
fun1(&c);
return 0;
}

fun1(&b);fun1(&c);所打印的hello 和 world。这就是虚函数的作用之一吧(本人也就是初学者)。当一个让一个基类类型指针指向派生类时,他所调用的函数如果在基类中是虚函数,则调用派生类中的同名函数,否则调用基类中的函数。

每天写一点,加深印象。

原创粉丝点击