首页 > 编程语言 >C++看程序写结果 虚函数、构造、析构、初始化列表

C++看程序写结果 虚函数、构造、析构、初始化列表

时间:2024-03-12 19:33:26浏览次数:21  
标签:初始化 类析构 Derived C++ szName Base 构造 析构

虚函数、构造、析构、初始化列表

#include <iostream>
using namespace std;
class Base{
public:
    Base(const char* p_szName):m_szName(p_szName)  {cout << "Base类构造:" << m_szName << "," << endl;}
    virtual ~Base()  {cout << "Base类析构:" << "~" << m_szName << "," << endl;}
    //~Base()  {cout << "Base类析构:" << "~" << m_szName << "," << endl;}
private:
    const char* m_szName;
};

class Derived:public Base{
public:
    Derived(const char* p_szName):m_szName(p_szName)
    ,m_objA((const char*)"A")
    ,m_objB((const char*)"B")
    ,Base((const char*)"C"){
        cout << "Derived类构造:" << m_szName << "," << endl;
    }
    virtual ~Derived()  {cout << "Derived类析构:" << "~"<< m_szName << "," << endl;}
    //~Derived()  {cout << "Derived类析构:" << "~"<< m_szName << "," << endl;}

private:
    const char* m_szName;
    Base m_objB;
    Base m_objA;
};

int main(){
    Base* p= new Derived("D");
    delete p;
    return 0;
}

先根据继承先后关系,用C完成Base的构造,然后根据Derived成员定义的先后关系,对字符串m_szName、成员m_objB、成员m_objA进行初始化,但是对字符串m_szName初始化并不首先打印,对成员m_objB、成员m_objA初始化会调用Base的构造函数,然后才执行大括号里面的内容

Base类构造:C,
Base类构造:B,
Base类构造:A,
Derived类构造:D,
Derived类析构:~D,
Base类析构:~A,
Base类析构:~B,
Base类析构:~C,

 

标签:初始化,类析构,Derived,C++,szName,Base,构造,析构
From: https://www.cnblogs.com/uacs2024/p/18069056

相关文章

  • VScode调用MSVC编译C++文件
    批处理.bat@echooffchcp65001ifnot"%~1"==""(setpos="%~1"&gotorun)set/ppos=工程路径Workspacepath::runcall"E:\ProgramFiles\MicrosoftVisualStudio\2022\Community\Common7\Tools\VsDevCmd.bat"code......
  • C++ 字符串和字符操作
    1.头文件#inlcude<string>2.std::string&char*区别char*是一个指针string是一个类,内部封装了char,是一个char管理容器3.std::string&C-style字符串区别std::string是C++标准库中的字符串类,提供了许多字符串操作的方法和功能,包括长度计算、拼接、查找、替换等......
  • K8S初始化master单节点(不使用配置文件,直接只用Kebuadm init)
    该文章主要记录初始化过程,及过程中遇到的问题卸载之前安装过的K8s集群点击查看详细代码#首先清理运行到k8s群集中的pod,使用kubectldeletenode--all#使用脚本停止所有k8s服务forserviceinkube-apiserverkube-controller-managerkubectlkubeletetcdkube-proxy......
  • C++新U4-贪心算法2
    [【贪心算法(二)】分发饼干]    【题意分析】将饼干分发孩子手上,并且使得满足的孩子数量最多【思路分析】为了尽可能满足最多数量的孩子,按照孩子想要获得的饼干大小从小到大的顺序依次满足每个孩子,且对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼......
  • C++ Qt开发:QNetworkAccessManager网络接口组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkAccessManager组件实现Web网页访问。QNetworkAccessManager是Qt网络模块中的关......
  • c++20 模板约束
    concept在c++20中,提案许久的concept被加入到标准中了,这也意味着不用再写恼人的SFINAE了(除非你是一个受虐狂,喜欢对着一堆报错中找到错误的位置)。c++20之前在c++20之前,如果需要对模板实参进行编译期检查,只能使用SFINAE,或者是部分使用c++17添加的ifconstexpr进行......
  • Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/
    一、前言用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_alaw/pcm_mulaw,将这个原始的音频流保存到mp4文件是会报错的,在调用avformat_write_header写文件头的时候提示(-22)Invali......
  • c++从零实现reactor高并发服务器!!!
    环境准备linux虚拟机安装升级c/c++编译器gcc/g++选项源代码文件1源代码文件2...源代码文件n-o指定输出的文件名(不能和源文件同名默认是a.out)-g调试-On链接时优化减小体积(n=1-3)-c只编译用于生成库-std=c++11支持c++11标准安装man功能man级别接口......
  • 线段树(C++)
    线段树的本质就是树状数组,只不过线段树不再需要lowbit函数来定位对应数据的存储位置,取而代之的则是直接计算分叉结果位置。node结构体​ 通常而言,线段树所需要的存储空间约等于原数组的4倍。由于线段树需要存储区间的范围,所以我们需要自己定义一个新结构体来方便存储:constint......
  • (C++)树状数组和线段树的VSCode Snippet
    学都学了,肯定要往snippet里塞好东西嘛{ //Placeyoursnippetsforcpphere.Eachsnippetisdefinedunderasnippetnameandhasaprefix,bodyand //description.Theprefixiswhatisusedtotriggerthesnippetandthebodywillbeexpandedandinserted.......