C++类继承时的构造函数

在C++类的继承中, 子类不仅要继承父类的属性和方法,而且还要继承其构造函数和析构函数。本文将详细讲解在C++类继承时的构造函数。

构造函数和析构函数的继承规则

在C++中,子类的构造函数和析构函数会默认调用父类的构造函数和析构函数。具体规则如下:

  1. 子类的构造函数会默认调用父类的无参构造函数。

如果父类没有无参构造函数,则必须在子类的构造函数中显示的调用父类的有参构造函数。

  1. 子类的析构函数会默认调用父类的析构函数。

如果父类有虚析构函数,则子类的析构函数也要声明为虚函数。

举个栗子:

class Person{
public:
    Person(){
        cout << "Person's constructor is called!" << endl;
    }
    ~Person(){
        cout << "Person's destructor is called!" << endl;
    }
};
class Student:public Person{
public:
    Student(){
        cout << "Student's constructor is called!" << endl;
    }
    ~Student(){
        cout << "Student's destructor is called!" << endl;
    }
};

int main(){
    Student s;
    return 0;
}

在这个例子中,子类Student继承了Person类,主函数中创建了一个Student对象s。当构造函数调用完毕时,输出的结果如下:

Person's constructor is called!
Student's constructor is called!
Student's destructor is called!
Person's destructor is called!

可以看到,构造函数和析构函数都按照继承规则调用了。

类构造函数的重载

当子类调用父类的构造函数时,可以选择调用有参构造函数或者无参构造函数。

子类的构造函数可以重载父类的构造函数。当然,这时需要在子类的构造函数中显示调用父类的构造函数,以保证父类的成员变量正常赋值。

举个栗子:在上面的示例中,如果我们要给Person类添加一个name成员变量,使得在子类构造时可以赋值,那么可以这么写:

class Person{
public:
    string name;
    Person(){
        cout << "Person's default constructor is called!" << endl;
    }
    Person(string n){
        name = n;
        cout << "Person's constructor with parameter " << name << " is called!" << endl;
    }
    ~Person(){
        cout << "Person's destructor is called!" << endl;
    }
};
class Student:public Person{
public:
    Student(){
        cout << "Student's default constructor is called!" << endl;
    }
    Student(string n):Person(n){
        cout << "Student's constructor with parameter " << n << " is called!" << endl;
    }
    ~Student(){
        cout << "Student's destructor is called!" << endl;
    }
};

int main(){
    Student s("Jack");
    cout << s.name << endl;
    return 0;
}

在这个例子中,Person类添加了一个string类型的name成员变量。在Student类中,重载了Person类的构造函数,以接受name参数。在构造子类对象时,可以直接调用带参数的构造函数,同时给成员变量name赋值。

输出的结果如下:

Person's constructor with parameter Jack is called!
Student's constructor with parameter Jack is called!
Jack
Student's destructor is called!
Person's destructor is called!

可以看到,name成员变量成功赋值。同时,子类和父类的构造函数和析构函数都按照规则正常调用了。

结论

在C++类继承时的构造函数中,必须要遵守一些继承规则,包括子类继承了父类的构造函数,子类构造函数默认调用父类构造函数等。同时,为了让子类拥有一些自己的特性,可以在子类的构造函数中重载父类的构造函数,在构造子类对象时可以自己传递参数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++类继承时的构造函数 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • go语言beego框架web开发语法笔记示例

    Go语言Beego框架Web开发语法笔记示例攻略 简介 Beego是一个基于Go语言的开源Web应用框架,它提供了一系列的工具和库,用于快速开发高性能的Web应用程序。本攻略将详细讲解Beego框架的语法和使用方法,并提供两个示例说明。 安装Beego框架 首先,你需要安装Go语言和Beego框架。请按照以下步骤进行安装: 安装Go语言:根据你的操作系统,从…

    other 2023年8月6日
    00
  • Visual Studio Code配置GitHub(Win7环境)

    Visual Studio Code配置GitHub(Win7环境)的完整攻略 在Win7环境下,我们可以使用Visual Studio Code来配置GitHub。本文将为您提供Visual Studio Code配置GitHub的完整攻略包括以下内容: 安装Git 配置Git 配置Visual Studio Code 示例说明 安装Git 首先,我们需要…

    other 2023年5月6日
    00
  • uni-app如何读取本地json数据文件并渲染到页面上

    Uni-app如何读取本地JSON数据文件并渲染到页面上 Uni-app是一个跨平台的开发框架,可以同时开发iOS、Android和Web应用。在Uni-app中,可以通过以下步骤读取本地JSON数据文件并将其渲染到页面上。 步骤一:创建本地JSON数据文件 首先,需要在Uni-app项目的根目录下创建一个本地JSON数据文件。可以将该文件命名为data.j…

    other 2023年8月6日
    00
  • docker下修改mysql配置文件的方法

    修改 MySQL 配置文件的方法有很多种,下面以使用 Docker 容器的方式为例,详细介绍如何在 Docker 下修改 MySQL 配置文件的步骤。 1. 查看 MySQL 容器运行状态 首先,我们需要先查看 MySQL 容器的运行状态,使用以下命令可以查看正在运行的 MySQL 容器列表: docker ps | grep mysql 如果没有在运行的 …

    other 2023年6月25日
    00
  • Spring Cloud Zipkin服务端追踪服务

    Spring Cloud Zipkin是一个分布式跟踪系统,用于提供跨越多个微服务的请求追踪解决方案。它基于Google Dapper的论文设计实现,通过收集和分析各个服务器之间的交互来提供微服务应用的链路跟踪支持。 以下是实现Spring Cloud Zipkin服务端追踪服务的攻略: 1. 添加依赖 首先,我们需要在Spring Boot应用的pom.x…

    other 2023年6月27日
    00
  • 记录Yii2框架开发微信公众号遇到的问题及解决方法

    记录Yii2框架开发微信公众号遇到的问题及解决方法 背景介绍 在使用Yii2框架进行微信公众号开发的过程中,我们可能会遇到一些问题。这篇攻略将记录一些常见的问题及其解决方法,帮助开发者更好地应对这些问题。 问题一:微信授权登录过程中无法获取openid 当我们使用微信授权登录功能时,有时候会遇到无法获取openid的问题,这时候我们可以先检查以下几点: 确认…

    other 2023年6月27日
    00
  • 怎样用cmd命令行运行Python文件

    Sure! 如何使用命令行运行Python文件需要以下步骤: 步骤一:打开命令行 打开命令行有多种不同的方法,以下是几种常见的方法: 按下Win+R快捷键,输入cmd,按下回车键 在Windows资源管理器中进入文件夹后,按下shift+右键,在弹出的右键菜单中点击“在此处打开命令窗口” 在Windows 10的开始菜单中搜索“命令提示符”并打开 步骤二:进…

    other 2023年6月26日
    00
  • linux上安装zookeeper 启动和关闭的教程

    下面是详细的 “linux上安装zookeeper 启动和关闭的教程”。 安装Zookeeper 步骤一:下载Zookeeper 我们可以在Zookeeper官网或https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/下载所需版本的Zookeeper。这里我下载的是zookeeper-3.4.14.tar…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部