![](/img/trans.png)
[英]Derived class's new constructor not building: “overloaded member function not found”
[英]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,名稱,薪水和權限。 您需要將其傳遞給基類構造函數進行初始化。 您不能直接初始化它們。
id
, name
和clearance
受到保護,因此您可以在派生類中訪問它們,但不能使用初始化列表直接對其進行初始化。 您可以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.