首页 > 编程语言 >[转]C++使用虚函数的时候,子类也要使用virtual关键字吗

[转]C++使用虚函数的时候,子类也要使用virtual关键字吗

时间:2023-08-26 15:23:02浏览次数:39  
标签:函数 子类 C++ 关键字 init virtual class

原文地址:https://blog.csdn.net/gao1440156051/article/details/45670715

父类使用虚函数是为了让子类重写,那子类重写的时候也需要带virtual关键字吗?比如:
class Base{
virtual bool init();
};
class Derived{
virtual bool init(); //这里的vitual是必须的吗?好像不用也能编译通过呃…..
};

c++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此,在子类从新声明该虚函数时,可以加,也可以不加,但习惯上每一层声明函数时都加virtual,使程序更加清晰。

 

#include <iostream>
#include <unordered_map>
using namespace std;

class BaseClass
{
public:
    virtual void SayHello() { cout << "BaseClass" << endl; }
};

class SonClass : public BaseClass
{
public:
    void SayHello() { cout << "SonClass" << endl; }
};

class GrandSonClass : public SonClass
{
public:
    void SayHello() { cout << "GrandSonClass" << endl; }
};

int main()
{
    BaseClass* ptr = new GrandSonClass();
    ptr->SayHello();  //输出: GrandSonClass (子类没用virtual, 孙子类依然有virtual效果)
    system("pause");
    return 0;
}

 

标签:函数,子类,C++,关键字,init,virtual,class
From: https://www.cnblogs.com/barrysgy/p/17658835.html

相关文章

  • Cisco Secure Web Appliance Virtual 15.0.0 GD - 适用于网络安全的思科高级威胁防护
    CiscoSecureWebApplianceVirtual15.0.0GD-适用于网络安全的思科高级威胁防护AsyncOSforWSA15.0.0GeneralDeployment(GD)请访问原文链接:https://sysin.org/blog/cisco-wsa-15/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoSecureWebAppliance......
  • Cisco Secure Email Virtual Gateway 15.0.0 GD - 电子邮件安全
    CiscoSecureEmailVirtualGateway15.0.0GD-电子邮件安全AsyncOSforESA15.0.0GeneralDeployment(GD)请访问原文链接:https://sysin.org/blog/cisco-esa-15/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoSecureEmail提供高级保护措施,保护您的收......
  • 【算法-二分查找】实现过程、C++代码示例以及实际应用
    二分查找简介:也称为折半查找,是一个在已排序数组中查找特定元素的搜索算法。它的工作原理是将有序数组分成两半,然后检查目标值是在左半部分还是右半部分,然后在所选择的那部分中继续查找。这一过程将不断地重复,直到找到目标值或确定目标值不在数组中。实现过程:1.初始化两个指针:lo......
  • C++STL函数
    1、排序算法描述键盘输入5个整数,使用vector进行存储,使用STL排序算法对元素进行排序(从大到小),再使用STL遍历算法输出元素。(元素和元素之间使用空格隔开)输入描述:键盘输入5个整数输出描述:输出排序后的元素,元素和元素之间使用空格隔开。#include<iostream>#include<ve......
  • 《C++》C11新特性--1
    1.原始字符串字面量R"(字符串)"constchar*str1="D:hello\world\test.txt";constchar*str2=R"(D:hello\world\test.txt)";std::cout<<"直接输出str:\t\t"<<str1<<std::endl;std::cout<......
  • 字符串处理C++
    1、字符串连接题目描述不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。输入每一行包括两个字符串,长度不超过100。输出可能有多组测试数据,对于每组数据,不借用任何字符串库函数实现无冗余地接受两个字符串,然后把它们无冗余的连接起来。输出连接......
  • android 添加多个c++文件并 调用c++打印调试信息
    首先在gradle文件中配置cmake:注意文件路径一定要对应上android{//...defaultConfig{//...externalNativeBuild{cmake{cppFlags"-frtti-fexceptions-Wno-deprecated-declarations"......
  • C++之运算符
    运算符函数在C++中会把运算符当做函数处理,一个表达式,其实可能调用了很多运算符函数来完成计算,这种特性对内建类型没有用,但是对于自建类型而言,通过设计运算符函数能够进行个性化运算,以此提高代码的可读性、易用性,例如string类Ⅰ.运算符函数的格式:'#'表示运算符,'O'表示运算符对......
  • C++单例模式
    单例模式什么是单例模式:只能实例化一个类对象(全局有且只有一个类的static实例)使用场景:进程管理器、日志管理器、网站访问计数器、应用配置程序、线程池、服务器的连接管理器实现单例模式的原理/步骤1、禁止在类外随意实例化对象,把构造函数/拷贝构造都私有化private2、确保......
  • 基于Virtual Box安装OpenKylin虚拟机
    基于VirtualBox安装OpenKylin虚拟机目录基于VirtualBox安装OpenKylin虚拟机为什么会想到安装麒麟系统安装前的准备教程系统的安装安装增强功能结束语为什么会想到安装麒麟系统麒麟操作系统(KylinOS)亦称银河麒麟,是由中国国防科技大学、中软公司、联想司、浪潮集团和民族恒星......