2013-10-17 69 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。