您的位置:首页 > 编程语言 > C语言/C++

【c++】虚函数讲解

2019-04-12 11:25 225 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hello_ape/article/details/89227662
  • 虚函数的作用

当涉及继承关系的时候,对于某些函数,基类和派生类希望有各自的版本,那么基类可以将函数声明为虚函数。

对于基类而言,其中的成员函数可以分为两种,一种希望派生类直接继承;第二种希望派生类有自己的版本,此时应当声明为虚函数。

对于派生类而言,并不是一定需要重写从基类继承来的虚函数。如果重写虚函数,那么派生类将有自己的版本,如果不重写,那么将使用基类的版本。

  • override关键字

如果派生类希望使用自己的版本,C++11提供了override关键字,可以显式地注明。override关键字放在const、或者参数列表之后。推荐使用关键字,否则当派生类中重写基类的虚函数,但是如果参数列表不一致,或者返回值不一致,那么此时并没有发生覆盖行为,只是派生类定义了一个新的函数。

  • final关键字

如果不希望派生类覆盖基类中的虚函数,可以使用final关键字。使用final关键字后,任何覆盖的尝试都将编译报错。

[code]#include <iostream>

class base{
public:
virtual void print() const {
std::cout << "base print" << std::endl;
}
};

class A :public base{
public:
int getval() const{
return val;
}
virtual void print() const {
std::cout << "A print: "<<getval() << std::endl;
}
private:
int val = 2;
};

class B :public base{
public:
int getval() const{
return val;
}

private:
int val = 2;
};

class C :public base{
public:
int getval() const{
return val;
}
virtual void print() const override final {
std::cout << "C print: " << getval() << std::endl;
}
private:
int val = 3;
};

class D :public C{
public:

//发生重写行为时,将编译报错
virtual void print()const {
std::cout << "D print: " << getval() << std::endl;
}
};

int
main(int argc, char **argv)
{
A a;
B b;
C c;
a.print();//输出  A print: 2
b.print();//输出  base print
c.print();//输出  C print: 3
system("pause");
return 0;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: