虚函数的用法有哪些?

虚函数的用法有哪些?,第1张

1)virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字

2)一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特征

3)子类覆盖此函数时,定义里可不加virtual关键字,但函数声明要和基类的完全一致!且此声明是必须的

4)不是纯虚函数时,父类的虚函数必须要实现; 而若将父类的虚函数设定为纯虚函数时,子类必需要覆盖之而且必须要实现之!

虚函数子类一般都是要自己实现的,实现后子类调用的时候是用的自己的

多是父类来调用这个虚函数,

classs cFather

{

public:

vistual int exp() = 0;//0纯虚,子类必须实现,可以不带,非纯虚可以不实现

}

class cSon1 :public cFather

{

int exp(){printf("this is son1\n");return 0;};

}

class cSon2 :public cFather

{

int exp(){printf("this is son2\n");return 0;};

}

int main(int argc,char argv)

{

cFather exp1 = new cSon1 ();

exp1->exp();//调用cSon1的

cFather exp2 = new cSon2 ();

exp2->exp();//调用cSon2的

system("pause");

delete exp1;

delete exp2;

reutrn 0;

}

不会执行,只会执行子类实现的函数,如果想执行父类的相应函数,可以在子类函数里用作用域限定符显示调用,例如 SubClass::fun(){ ParentClass:fun();}

介是2个问题

1当你预计当前类的子类中会有情况重新实现当前方法或属性时,需要加virtual

2当你需要使用 一个集合,这个集合类似数组(即内部元素为同一类型),并且这个集合要随时可以增册元素,则应该使用List

多态性指的是程序在运行的时候才决定调用的是基类(父类)的函数还是调用的派生类(子类)的函数

这种情况我们叫函数的覆盖

用了virtual函数 不一定就是函数的覆盖

覆盖要求函数的名相同 且参数个数 类型也相同

当参数的数目和类型不相同 (不管基类是不是有virtual关键词修饰) 我们叫函数的隐藏

(程序在编译的时候已经可以确定调用的是那一个函数了)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12157816.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存