C ++创建2参数构造函数

时间:2013-10-17 18:35:29

标签: c++ constructor

我已经编写了一个程序来显示公司的名称和报告名称,但是,我需要这样做,以便如果有人没有输入任何内容,程序会显示两个默认名称。我需要添加一个带有2个参数的构造函数。我发现自己很困惑,越来越迷茫。我试过让我的代码看起来像教科书的例子,但无济于事。有人可以给我一些指示和方向吗?

我在Microsoft Visual Studios 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();
}

3 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

另一种方法是默认初始化成员变量:

class Heading
{
   ...

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

供参考: 非静态数据成员 Member initialization

答案 2 :(得分: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。