虚函数与重载函数的区别与联系
答案:3 悬赏:80
解决时间 2021-04-22 03:12
- 提问者网友:幽瑟玉琼情殇
- 2021-04-21 17:43
虚函数与重载函数的区别与联系
最佳答案
- 二级知识专家网友:承载所有颓废
- 2021-04-21 17:53
虚函数在基类中声明 用virtual修饰 但是并不实现 ,只是在子类继承基类时才实现
重载函数是基类中已经有某个函数,当子类继承时重新实现(基类已实现)覆盖基类的方法。
虚函数和重载在子类和基类中的方法同名,参数类型相同,返回值类型相同。个人感觉 虚函数是一种特殊的重载,即必须被重载的函数(一般函数可以不被重载)
重载函数是基类中已经有某个函数,当子类继承时重新实现(基类已实现)覆盖基类的方法。
虚函数和重载在子类和基类中的方法同名,参数类型相同,返回值类型相同。个人感觉 虚函数是一种特殊的重载,即必须被重载的函数(一般函数可以不被重载)
全部回答
- 1楼网友:我们只是兮以城空
- 2021-04-21 18:36
abstract 抽象方法
virtual 虚方法
重载函数就是override的方法
比如 父类A.m() 子类B.m()
1 abstract的方法,父类可以不实现,让子类去重写(重写=overwrite,不过一般不会提到).父类如果存在abstract方法,那么必然是抽象类,必然不能直接实例化(比如 A a=new A()是不行的),必须由子类去继承并且重写所有抽象方法后再去使用.比如:A a=new B().
2 虚方法,父类写了之后,子类可以去override.继承的时候调用B.m()
class A{
virtual m() {xxxxx}
}
class B:A{
override m()
{base.m();xxxxxxx}
}
3 一般的重载.这个跟继承没有多大关系.普通的类自身不用写什么关键字就能实现.有着同样的名字,但是调用的时候根据参数的不同,编译器选择合适的来使用
class A{
m(){}
m(int ia){}
m(string sa){}
}
4 重载跟抽象还有虚方法可以出现在一个类里面
abstract class A //这个父类声明了一个抽象方法,一个虚方法,自己实现了一个重载
{
abstract void m()
virtual void m(int ia)
void m(string sa)
{
m(Convert.ToInt(sa));
}
class B:A//仅仅是实现了父类没有实现的m()
{
void m(){//xxxxxx}
}
}
class C:A //实现了m()并且重写了被父类定义为虚方法的 m(int ia)
{
void m()//这个必须实现
override void m(int ia){//xxxxx}
}
5 new关键字(不过一般不用去在意)
class D:B //如果是c#其实还有一个new关键字
{
public void new m(string sa){}//这里故意隐藏父类的m(string)方法
}
6 多做做实验练习下,这些东西基本上都是去公司应聘的oo必考题.
- 2楼网友:情战辞言
- 2021-04-21 18:25
虚函数允许继承类的对象指针访问基类非私有成员,重载就是相同的函数名,不同的参数类型,调用重载函数的时候根据需要指定实参,具有灵活性的特点
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯