首页 > 编程语言 >C++ 构造函数/析构函数中调用虚函数的情况简单测试

C++ 构造函数/析构函数中调用虚函数的情况简单测试

时间:2024-08-23 20:25:51浏览次数:10  
标签:调用 析构 namespace C++ Animal 构造函数 函数


#include <string>
#include <iostream>

using namespace std;

namespace
{
    class Animal
    {
    public:
        Animal()
        {
            cout << "基类调用虚函数…" << endl;
            cout << GetInfo() << endl;
        }
    public:
        virtual string GetInfo()
        {
            return "我是动物";
        }
    };

    class Dog :public Animal
    {
    public:
        Dog()
        {
            cout << "派生类调用虚函数…" << endl;
            cout << GetInfo() << endl;
        }
    public:
        string GetInfo() override
        {
            return "我是动物:""小狗狗";
        }
    };
}
#if 1

int main()
{
    Dog dog;
    return 0;
}

#endif

输出:

基类调用虚函数…
我是动物
派生类调用虚函数…
我是动物:小狗狗

从输出结果可以看出,构造函数(析构函数也一样)内部调用了虚函数的时候,执行的是与构造函数(析构函数)所在同一个类的虚函数版本。

标签:调用,析构,namespace,C++,Animal,构造函数,函数
From: https://www.cnblogs.com/huvjie/p/18377042

相关文章

  • 【C++基础】static、const在类中的应用
    目录static一、修饰的变量或函数类型1.修饰全局变量2.修饰局部变量1.通过函数访问2.通过类的静态成员3.修饰函数4.修饰类中的成员二、在类中的应用场景1.共享数据(跨对象共享状态)2.单例模式3.工具类或辅助函数4.类级别的常量5.计数器或标识符生成器6......
  • 【C++基础】类的构造函数和析构函数
    目录构造函数(Constructor)定义种类1.默认构造函数2.带参数的构造函数3.浅拷贝构造函数4.深拷贝构造函数深拷贝和浅拷贝的区别5.移动构造函数析构函数(Destructor)构造函数与析构函数的调用时机构造函数:析构函数:构造函数和析构函数的最佳实践避免在析构函数中抛出异......
  • 【第三节】x86汇编寻址方式与函数
    目录一、x86汇编指令1.1指令简介1.2操作码和操作数1.3指令的助记符格式1.4指令操作数表达方式1.5汇编语言的多种表达方式二、寻址方式2.1立即数寻址2.2寄存器寻址2.3存储器寻址2.4直接寻址2.5寄存器间接寻址2.6寄存器相对寻址2.7基址变址寻址2.8相......
  • 内置函数式接口
    只包含一个抽象方法的接口,称为函数式接口。可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。在任意函数式接口上设置@FunctionalInterface注解,这样做可以检查它是否是一个函数式接口,同时javadoc也会......
  • 【C】第5天 认识一揽子字符串函数
    字符串函数StringFunctionC语言自带的头文件string.h中包含了一些常用字符串函数原型,合理利用它们将有助于弥补C在字符串处理方面的不足。STR-FUNC-1检查字符串长度的strlen()库函数strlen()的函数原型:size_tstrlen(charconst*string)它接受一个指向字符串起始......
  • 【C++】12.智能指针
    在上一篇博客【C++】11.异常中我们知道有些时候会造成内存空间的未释放从而导致内存泄漏,因此本篇博客的内容就是如何减少内存泄漏——智能指针。一、RAIIRAII(ResourceAcquisitionIsInitialization)是一种利用对象生命周期来控制程序资源的简单技术,因此又被称为资源获取......
  • I2C软件模拟与Delay寄存器延迟函数
    环境芯片:STM32F103ZET6库:来自HAL的STM32F1XX.H原理图有图可知SCL和SDA两条线接到了PB10和PB11Driver_I2C.h#ifndef__DRIVER_I2C#define__DRIVER_I2C#include"stm32f1xx.h"#include"Com_Delay.h"//定义拉高SCL引脚的宏操作#defineSCL_HIGH(GPIOB->ODR|......
  • C++ 使用 using 声明语句放开基类的重载函数
    #include<functional>#include<string>#include<iostream>#include<vector>#include<memory>#include<set>#include<map>usingnamespacestd;namespace{classAnimal{public:stringGe......
  • 箭头函数的基本语法
    箭头函数基本语法//constfun=()=>{//console.log(1,2,3);//}//fun()//有多个参数的时候括号一定不能省略letfun1=(a,b)=>{console.log(a,b);}fun1('我是实参')/......
  • C++ STL源码个人学习与分析记录 ——空间配置器(allocator)
    STL源码个人学习与分析记录——空间配置器(allocator)1.为什么需要空间配置器?2.SGI-STL空间配置器的实现2.1一级空间配置器:malloc_alloc_template2.2二级空间配置器:default_alloc_template2.2.1.内存池技术2.2.2.自由链表(free-list)2.2.3Union2.3二级空间配置器的......