• C++ 子类构造函数初始化列表与基类关系


    抽象基类的派生子类构造函数按照初始化列表的写法怎么也写不对,查资料后记录

    要点如下

    1. 公有类型派生类不能访问基类私有成员

      --但我这里基类没有private成员

    2. 为什么要调用父类的构造函数?

      构造函数用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。*

    3. 派生类构造函数
      在创建派生类对象时,先调用基类的构造函数,然后调用派生类的构造函数;撤销对象时,析构函数被调用的顺序则相反。

    4. 若派生类中包含对象成员,则派生类的构造函数初始化成员列表中既要列出基类的构造函数也要列出对象的构造函数。派生类定义对象时,先调用基类的构造函数,再调用对象的构造函数,最后调用派生类的构造函数。

    #pragma once
    #include<iostream>
    #include<string>
    using namespace std;
    
    //职工抽象基类
    class Worker
    {
    public:
    	Worker(){}
    	Worker(int id, string name, int dId):m_Id(id),m_Name(name),m_DeptId(dId){}
    	int m_Id; //职工编号
    	string m_Name; //职工姓名
    	int m_DeptId; //职工所在部门名称编号
    };
    
    

    正确

    //派生 老板类
    class Boss :public Worker
    {
    public:
    	Boss(int id, string name, int dId):Worker(id,name,dId)
    	{
    		/*this->m_Id = id;
    		this->m_Name = name;
    		this->m_DeptId = dId;*/
    	}
    };
    

    错误

    //派生 老板类
    class Boss :public Worker
    {
    public:
    	Boss(int id, string name, int dId):id(m_Id),name(m_Name),dId(m_DeptId)	 	
            {}
    //派生类的构造函数的初始化列表可以包含基类的构造函数、派生类成员的初始化,但是不能有基类成员的初始化!
    };
    

    reference

    https://blog.csdn.net/libaineu2004/article/details/19565229

  • 相关阅读:
    bodybuilding
    DBLINK的session无法关闭,报异常!
    失控
    eclipse
    Linux下查看用户列表
    org.apache.commons.httpclient
    java map 遍历
    java String split
    胸上肌到底要怎么练啊!
    POI操作Excel常用方法总结
  • 原文地址:https://www.cnblogs.com/impw/p/15678308.html
Copyright © 2020-2023  润新知