网站开发和报价方案,为什么做的网站别的浏览器打不开怎么办,江阴外贸网站制作,html 做网站案例简单转载自#xff1a;https://www.cnblogs.com/cj2014/p/7692707.html 1.虚函数(impure virtual) C的虚函数主要作用是“运行时多态”#xff0c;父类中提供虚函数的实现#xff0c;为子类提供默认的函数实现。 子类可以重写父类的虚函数实现子类的特殊化。 如下就是一…转载自https://www.cnblogs.com/cj2014/p/7692707.html 1.虚函数(impure virtual) C的虚函数主要作用是“运行时多态”父类中提供虚函数的实现为子类提供默认的函数实现。 子类可以重写父类的虚函数实现子类的特殊化。 如下就是一个父类中的虚函数
class A
{
public:virtual void out2(string s){coutA(out2):sendl;}
};
2.纯虚函数(pure virtual) C中包含纯虚函数的类被称为是“抽象类”。抽象类不能使用new出对象只有实现了这个纯虚函数的子类才能new出对象。 C中的纯虚函数更像是“只提供申明没有实现”是对子类的约束是“接口继承”。 C中的纯虚函数也是一种“运行时多态”。 如下面的类包含纯虚函数就是“抽象类”
class A
{
public:virtual void out1(string s)0;virtual void out2(string s){coutA(out2):sendl;}
};
3.普通函数(no-virtual) 普通函数是静态编译的没有运行时多态只会根据指针或引用的“字面值”类对象调用自己的普通函数。 普通函数是父类为子类提供的“强制实现”。 因此在继承关系中子类不应该重写父类的普通函数因为函数的调用至于类对象的字面值有关。
4.程序综合实例
#include iostream
using namespace std;class A
{
public:virtual void out1()0; //由子类实现纯虚函数由子类实现virtual ~A(){};virtual void out2() //默认实现子类可以重写函数。虚函数是为了允许用基类的指针来调用子类的函数{coutA(out2)endl;}void out3() //强制实现子类不应该重写函数{coutA(out3)endl;}
};class B:public A
{
public:virtual ~B(){};void out1(){coutB(out1)endl;}void out2(){coutB(out2)endl;}void out3(){coutB(out3)endl;}//自己添加的void out4()//子类中可以有父类没有的函数{coutB(out4)endl;}
};
int main()
{ A *abnew B; ab-out1(); ab-out2(); ab-out3(); cout************************endl; B *bbnew B; bb-out1(); bb-out2(); bb-out3(); delete ab; delete bb; return 0;
}
运行结果
B(out1)
B(out2)
A(out3)
*****************
B(out1)
B(out2)
B(out3)
定义一个函数为虚函数不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数才代表函数没有被实现。 定义纯虚函数是为了实现一个接口起到一个规范的作用规范继承这个类的程序员必须实现这个函数