虚函数是类的成员函数,虚函数体现了运行时的多态性,编译时的多态性由函数重载和运算符重载等体现
虚函数和函数重载都体现了多态性,但他们的表现形式不一样,函数重载调用根据参数的个数、参数的类型进行区分,而虚函数则是根据动态联编(运行时的多态性)来确定的。
#include <iostream>
using namespace std;
class A
{
public:
int fun(int a){return a;}
int fun(int a,int b){return a+b;}
virtual float fun(float c){return c;}
virtual void f()=0;//纯虚函数
};
class B:public A
{
public:
int fun(int a)
{
return a+10;
}
int fun(int a,int b)
{
return a+b+10;
}
float fun(float c)
{
return c+10.0;
}
void f()
{
cout<<"子类不重写纯虚函数,父类不能实例化,且子类继承父类必须实例化纯虚函数"<<endl;
}
};
class C
{
public:
C() {}
~C() {}
int f;
};
/*函数的重载*/
int fun(int a)
{
return a;
}
int fun(int a,int b)
{
return a+b;
}
float fun(float a)
{
return a;
}
int main()
{
int a=fun(1);
int b=fun(1,2);
float c=1.23;
float d=fun(c);
cout<<a<<‘ ‘<<b <<‘ ‘<<d<<endl;
// A aa;拥有纯虚函数,不能初始化
A *aa=new B;
cout<<aa->fun(1)<<‘ ‘<<aa->fun(1,2)<<‘ ‘<<aa->fun(float(1.23))<<endl;
B *bb=new B;
cout<<bb->fun(1)<<‘ ‘<<bb->fun(1,2)<<‘ ‘<<bb->fun(float(1.23))<<endl;
aa->f();
bb->f();
C cc;//申请的空间里的值是随机值
cout<<cc.f<<endl;
C *ccc=new C();//申请的空间里的值已经初始化
cout<<ccc->f<<endl;
return 0;
}
输出:
1 3 1.23
1 3 11.23
11 13 11.23
子类不重写纯虚函数,父类不能实例化,且子类继承父类必须实例化纯虚函数
子类不重写纯虚函数,父类不能实例化,且子类继承父类必须实例化纯虚函数
4198160
0
原文:https://www.cnblogs.com/ybf-yyj/p/9374638.html