c++ - 派生类中的构造函数重载

标签 c++ inheritance constructor constructor-overloading

我有基类Manager和派生类Worker,继承似乎工作正常 - 我使用派生类的默认值创建了一个新对象构造函数和我可以正确输出。 但现在我想为派生类(Worker)创建一个重载构造函数,并且似乎存在编译错误,我厌倦了寻找答案,但没有找到答案。 为什么编译显示 Worker 没有 id、姓名和薪水字段?我已经按照书本创建了一个派生类并为其创建了 ctor。

Manager header :

#include <string>
#ifndef MANAGER_H
#define MANAGER_H

class Manager
{
public:
    Manager (); //ctor
    Manager (std::string, std::string, float, int); //overloaded ctor
    friend void display (Manager&); //friend function is declared
    ~Manager (); //dtor
protected:
    std::string id;
    std::string name;
    float salary;
private:
    int clearance;
};

经理cpp:

#include <iostream>
#include "Manager.h"
#include "Worker.h"

Manager::Manager() //default ctor
{
id = "M000000";
name = "blank";
salary = 0;
clearance = 0;
}

Manager::Manager(std::string t_id, std::string t_name, float wage, int num): id (t_id), name      (t_name), salary(wage), clearance (num)
{
//overloaded ctor
}

Manager::~Manager()
{
 //dtor
}

Worker header :

#include <string>
#ifndef Worker_H
#define Worker_H

class Worker: public Manager
{
public:
    Worker();
    Worker (std::string, std::string, float, int);
    ~Worker();
     friend void display (Worker&); //friend function is declared
protected:
    int projects;
private:

};

#endif // Worker_H

worker cpp:

#include <iostream>
#include "Manager.h"
#include "Worker.h"

Worker::Worker() //default ctor
{
id = "w000000";
name = " - ";
salary = 0;
projects = 0;

}
Worker::Worker(std::string t_id, std::string t_name, float wage, int num) : id (t_id), name (t_name), salary (wage), projects (num);
{
//ctor
}
Worker::~Worker()
{
//dtor
}

最佳答案

 Worker::Worker(std::string t_id, std::string t_name, float wage, int num) : id (t_id), name (t_name), salary (wage), projects (num)
{
//ctor
}

在这里您初始化基类中定义的成员 ID、姓名、薪水和权限。您需要将其传递给基类构造函数进行初始化。您不能直接初始化它们。
idnameclearance 受到保护,因此您可以在派生类中访问它们,但不能使用初始化列表直接初始化它们。您可以在构造函数内部初始化在初始化列表中调用基本构造函数

Worker::Worker(std::string t_id, std::string t_name, float wage, int num):Manager(t_id,t_name,wage,0), projects (num)
{
//ctor
}

关于c++ - 派生类中的构造函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662793/

相关文章:

c++ - qt 如何使用按钮动态添加包含一些小部件的组框?

c++ - 在循环中组合元组

c++如果满足所有条件

java - 以 Parent 和 Child 类作为参数的方法重载

Java - 继承的方法com.example.project.ConcreteA无法隐藏com.example.project.MyInterface中的抽象方法

c++ - 无法理解与模板和构造函数相关的错误

c++ - 如何使具有引用数据成员的类在没有参数的情况下可构造?

c++ - Windows 上的 C++ 中是否有原生 XmlReader 等效 API?

java - IllegalArgumentException:Java Constructor.newInstance() 中的参数数量错误

inheritance - Smalltalk:检查方法是否属于类(或其继承层次结构)