2016-06-02 7 views
-1
class Employee 
{ 
public: 
    Employee(const string& fName, const string& lName, float salary) { 
     mSalary = salary; 
     mFirstName = fName; 
     mLastName = lName; 
    } 

    static Employee create() { 
     string input1, input2; 
     float sal; 
     cout << "Enter first name: "; 
     cin >> input1; 
     cout << "\nEnter last name: "; 
     cin >> input2; 
     cout << "\nEnter salary here: "; 
     cin >> sal; 
     cout << "\n"; 
     Employee emp(input1, input2, sal); 
     return emp; 
    } 

    virtual void printStats() { 
     cout << "===============================================\n"; 
     cout << "First name:\t\t" << mFirstName << endl; 
     cout << "Last name:\t\t" << mLastName << endl; 
     cout << "Salary:\t\t\t" << mSalary << endl; 
    } 

    friend ostream& operator<<(ostream& outFile, Employee& emp) { 
     emp.print(outFile); 
     return outFile; 
    } 


    virtual string getName() { 
     return mFirstName; 
    } 

protected: 
    virtual void print(ostream& str) { 
     str << "Name: " << mFirstName << " " << mLastName << endl; 
     str << "Salary" << mSalary << endl; 
    } 
    string mFirstName; 
    string mLastName; 
    float mSalary; 
}; 

が動作していない、私はこの方法を持っている:私はこの方法を使用する場合演算子オーバーロードが<<データベースと呼ばれる別々のクラスでは

void showEmployees() { 
     int counter = 1; 
     for (Employee* e : data) { 
      cout << "\n["<<counter<<"]\n"<<e<<"\n"; 
      counter++; 
     } 
    } 

私はちょうどメモリアドレスを取得します。また、私は実装がヘッダーファイル内にあることを知っています(私はちょうど怠け者でした)。

Making operator<< virtual?

私は効果のostreamオブジェクトに従業員を挿入できるように、私はここで、このアドバイスに従ったが、それはちょうど私のメモリアドレスを与える...私はostreamに&を返すことは私のアドレスが、私ドンを与えることを取得他に何ができるのか分かりません。

+1

'cout <<" \ n ["<< counter <<"] \ n "<< * e <<" \ n ";" – songyuanyao

答えて

1

Employeeへのポインタを印刷しようとしています。そのため、アドレスを取得しています。

for (Employee* e : data) { 

ですから、印刷する場合、あなたは住所を印刷:ちょうどポインタデリファレンス:ここで定義されているよう

cout << "\n[" << counter << "]\n" << *e << "\n"; 
0

eEmployeeへのポインタです。あなたはeが指す値を印刷したい場合、あなたはそれを間接参照する必要があります。

cout << "\n[" << counter << "]\n" << *e << "\n"; 
//         ^-- here 
0

あなたの問題は、あなたのようにあなたの挿入演算子を定義し、ということである:

ostream& operator<<(ostream& outFile, Employee& emp) 

そして、あなたが渡すことによって、それを呼び出しますポインタ...あなたはでEmployeeを取るためにあなたのオペレータを再定義する必要があり

..... 
for (Employee* e : data) { 
     cout << "\n["<<counter<<"]\n"<<e<<"\n"; 
     ..... 

const&

ostream& operator<<(ostream& outFile, const Employee& emp) 

など、それを呼び出す:

..... 
for (Employee* e : data) { 
     cout << "\n["<<counter<<"]\n"<< *e<<"\n"; 
     ..... 

また、およそconst-correctness考えると、あなたのprint memeber機能へのconstを追加します。

virtual void print(ostream& str) const; 
関連する問題