2013-10-17 240 views
1

我編寫了一個程序來顯示公司的名稱和報告名稱,但是,我需要這樣做,以便如果有人不輸入任何內容,程序將顯示兩個默認名稱。我需要添加一個2參數的構造函數。我發現我迷惑自己,並越來越迷失。我試着讓我的代碼看起來像教科書的例子,但無濟於事。有人能給我一些指示和方向嗎?C++創建2參數構造函數

我在Microsoft Visual Studio Express 2012中使用C++,這裏是我當前的代碼。

//This program displays a company's name and report. 
#include <iostream> 
#include <string> 
using namespace std; 



class Heading 
{ 
private: 
    string company; 
    string report; 

public: 

    void storeInfo (string c, string r); 

    string getCompany() 
    { 
     return company; 
    } 
    string getReport() 
    { 
     return report; 
    } 
}; 

void Heading::storeInfo(string c, string r) 
{ 
company = c; 
report = r; 
} 

void storeInfo(Heading&); 
void showInfo(Heading); 

int main() 
{ 
Heading company; 

storeInfo(company); 
showInfo(company); 

cin.ignore(); 
cin.get(); 

return 0; 
} 

/*****storeInfo*****/ 
void storeInfo(Heading &item) 
{ 
string company; 
string report; 

cout << "\nPlease enter the company name.\n"; 
getline(cin, company); 

cout << "\nPlease enter the report name.\n"; 
getline(cin,report); 

item.storeInfo(company, report); 
} 

/*****showInfo*****/ 
void showInfo(Heading item) 
{ 
cout << item.getCompany() << endl; 
cout << item.getReport(); 
} 
+1

我沒有看到這裏定義的任何*構造函數。構造函數具有與該類相同的名稱,並且沒有返回類型。 – crashmstr

+1

構造函數在哪裏? –

+0

它是否將標題(字符串公司,字符串,報告)添加到類的公共部分? – Moxy

回答

4

將這個類裏面創建一個構造函數:

Heading() { 
    company = "Default company"; 
    report = "Default report"; 
} 

你也可以這樣做:

Heading(const char *def_company, const char *def_report) { 
    company = def_company; 
    report = def_report; 
} 

而且這樣的(動態內存)創建新標題對象:

Heading *object = new Heading("default company", "default report"); 

或像這樣(在棧中分配):

Heading object("default_company", "default report"); 
+3

我推薦使用構造函數初始值設定項列表,而不是分配給主體中的成員。我強烈建議不要使用這種動態方法,但如果你需要它,請使用智能指針。 – chris

+2

如何在靜態存儲器中進行第二次初始化? –

0

另外一個辦法是這樣的,以默認初始化成員變量:

class Heading 
{ 
    ... 

private: 
    std::string company = "Default"; 
    std::string report = "Default"; 
}; 

參考: 非靜態數據成員Member initialization

0

目前尚不清楚你實際需要什麼。要麼你確實不知道如何編寫構造函數,或者你需要數據成員的setter。如果你需要一個構造函數,你可以寫

class Heading 
{ 
private: 
    string company; 
    string report; 
    const char *default_company = "Unknown company"; 
    const char *default_report = "Unknown report"; 

public: 

    Heading(const std::string &company = default_company, const std::string &report = default_report) 
     : company(company), report(report) 
    { 
    } 
    void storeInfo (string c, string r); 

    string getCompany() 
    { 
     return company; 
    } 
    string getReport() 
    { 
     return report; 
    } 
}; 

如果你需要setter,那麼只需簡單地命名它們。例如,

void storeCompany(const std::string &); 
void storeReport(const std::string &); 

而不是storeInfo。