簡體   English   中英

派生類中的重載構造函數

[英]Overloaded constructor in derived class

我有基類Manager和派生類Worker ,繼承似乎正常工作-我已經使用它的默認構造函數創建了派生類的新對象,並且我可以正確輸出。 但是現在我想為派生類( Worker )創建一個重載的構造函數,並且似乎出現了編譯錯誤,我很累地尋找一個答案,但沒有找到答案。 為什么編譯器說Worker沒有身份證,姓名和薪水字段? 我已經根據該書創建了一個派生類並為其創建了ctor。

Manager標題:

#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;
};

Manager 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頭:

#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受到保護,因此您可以在派生類中訪問它們,但不能使用初始化列表直接對其進行初始化。 您可以initialize inside the constructor進行initialize inside the constructor ,也可以make a call to base constructor in initialization list

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

派生類看不到其基類的私有成員。 您必須委托構造函數。

您的Worker構造函數應類似於:

Worker::Worker() : Manager("w000000", " - ", 0, 0) {}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM