2

基本クラスManagerと派生クラスWorkerがあり、継承が適切に機能しているようです-デフォルトのコンストラクターを使用して派生クラスの新しいオブジェクトを作成し、適切に出力できます。しかし、派生クラス ( ) のオーバーロードされたコンストラクターを作成したいのですWorkerが、コンパイル エラーが発生しているようです。答えを探すのに疲れましたが、見つかりませんでした。コンパイルでWorkerid、name、salary フィールドがないと表示されるのはなぜですか? 本で派生クラスを作成し、そのための ctors を作成しました。

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

Managercpp:

#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

Workercpp:

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

3 に答える 3

0

コンストラクタ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)
{
}
于 2014-07-09T20:27:09.570 に答える
0

派生クラスは、基本クラスのプライベート メンバーを認識しません。コンストラクターを委任する必要があります。

于 2014-07-09T20:05:28.280 に答える