C ++构造函数并使其显示默认答案

莫西

因此,我仍在研究此问题,并认为我已正确。但是,现在仅显示“ ABC Industries”和“ Report”,而不是仅在未输入任何信息的情况下显示。我在哪里弄乱我的代码?

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

class Heading {
private:
    string company;
    string report;

public:
    Heading() {
        company = "ABC Industries";
        report = "Report";
    }


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


    void storeInfo(string company, string report);

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


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

void storeInfo(Heading&);
void showInfo(HANDLE, Heading);
void placeCursor(HANDLE, Heading);

int main() {
    Heading company;
    HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
    storeInfo(company);
    showInfo(screen, 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);
}

/*****placeCursor*****/
void placeCursor(HANDLE screen, int row, int col) {
    COORD position;
    position.Y = row;
    position.X = col;
    SetConsoleCursorPosition(screen, position);
}

/*****showInfo*****/
void showInfo(HANDLE screen, Heading item) {
    system("cls");
    placeCursor(screen, 6, 25);
    cout << "********************************" << endl;
    placeCursor(screen, 8, 32);
    cout << item.getCompany() << endl;
    placeCursor(screen, 11, 36);
    cout << item.getReport();
    placeCursor(screen, 13, 25);
    cout << "********************************" << endl;
}
看到

更新资料

这是一个显示默认值的版本:

看到它住在Coliru

class Heading {
private:
    string company;
    string report;

    static string defaultCompany() { return "ABC Industries"; }
    static string defaultReport () { return "Report"; }

public:
    Heading(string const& c = defaultCompany(), string const& r = defaultReport()) 
        : company(c), report(r) { }

    void storeInfo(string const& c, string const& r)
    {
        company = c;
        report  = r;
    }

    string getCompany() const { return company.empty()? defaultCompany() : company; }
    string getReport()  const { return report.empty()?  defaultReport()  : report;  }
};

如您所见,您将需要检查收到的输入是否为空,因为您将始终无条件地将中的成员设置为storeInfo

完整程序:

#include <iostream>
#include <string>

using namespace std;

namespace // windows_cruft
{
    using HANDLE = unsigned;
    HANDLE STD_OUTPUT_HANDLE = 1;
    HANDLE GetStdHandle(HANDLE) {return 42;}

    struct COORD { int X,Y; };
    void SetConsoleCursorPosition(HANDLE, COORD){}
}

class Heading {
private:
    string company;
    string report;

    static string defaultCompany() { return "ABC Industries"; }
    static string defaultReport () { return "Report"; }

public:
    Heading(string const& c = defaultCompany(), string const& r = defaultReport()) 
        : company(c), report(r) { }

    void storeInfo(string const& c, string const& r)
    {
        company = c;
        report  = r;
    }

    string getCompany() const { return company.empty()? defaultCompany() : company; }
    string getReport()  const { return report.empty()?  defaultReport()  : report;  }
};

void storeInfo(Heading&);
void showInfo(HANDLE, Heading);
void placeCursor(HANDLE, Heading);

int main() {
    Heading company;
    HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
    storeInfo(company);
    showInfo(screen, 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);
}

/*****placeCursor*****/
void placeCursor(HANDLE screen, int row, int col) {
    COORD position;
    position.Y = row;
    position.X = col;
    SetConsoleCursorPosition(screen, position);
}

/*****showInfo*****/
void showInfo(HANDLE screen, Heading item) {
    //system("cls");
    placeCursor(screen, 6, 25);
    cout << "********************************" << endl;
    placeCursor(screen, 8, 32);
    cout << item.getCompany() << endl;
    placeCursor(screen, 11, 36);
    cout << item.getReport() << endl;
    placeCursor(screen, 13, 25);
    cout << "********************************" << endl;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++继承类不显示默认构造函数

来自分类Dev

C ++结构默认构造函数

来自分类Dev

C ++调用默认构造函数而不是复制构造函数

来自分类Dev

没有默认构造函数的奇怪的C ++复制构造函数

来自分类Dev

用默认构造函数生成的C ++移动构造函数

来自分类Dev

C ++复制构造函数和默认构造函数

来自分类Dev

C ++ 11私有默认构造函数

来自分类Dev

默认构造函数未称为C ++ OOP

来自分类Dev

定义的副本构造函数c ++的默认行为

来自分类Dev

C#如何从默认构造函数继承

来自分类Dev

C ++-没有适当的默认构造函数

来自分类Dev

没有调用C ++默认构造函数

来自分类Dev

C ++默认构造函数语法

来自分类Dev

C ++模板构造函数默认参数

来自分类Dev

如何在C ++中“默认构造函数”

来自分类Dev

在C结构上调用默认构造函数

来自分类Dev

没有调用C ++默认构造函数

来自分类Dev

默认构造函数上的C ++传递点

来自分类Dev

非默认构造函数的C ++继承

来自分类Dev

C ++默认构造函数语法

来自分类Dev

在类体之外定义函数时,c ++派生的构造函数-“无默认构造函数”

来自分类Dev

Java是否具有默认的复制构造函数(如C ++)?

来自分类Dev

C ++是否强迫我定义默认构造函数

来自分类Dev

在C ++中由double默认构造函数分配的值

来自分类Dev

C ++构造函数中参数的默认值

来自分类Dev

C ++中隐式Default构造函数的默认值

来自分类Dev

C ++继承:避免调用基类的默认构造函数

来自分类Dev

C ++隐式默认构造函数的意义是什么?

来自分类Dev

C ++显式声明在默认构造函数中触发警告