C++构造函数并使其显示默认答案
C++ Constructor and Getting it to Display a Default Answer
所以我仍在研究这个问题,并认为我是正确的。但是,现在它只显示"ABC工业"和"报告",而不是仅在未输入信息时才显示。我在代码中搞砸了哪里?
//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;
}
更新
下面是一个版本,显示了如何在预期时显示默认值:
在科里鲁现场观看
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;
}
你的作业从后到前都有。这:
void Heading::storeInfo(string c, string r) {
c = company;
r = report;
}
应该是这样的:
void Heading::storeInfo(string c, string r) {
company = c;
report = r;
}
正如 sehe 所提到的,定义它:
void Heading::storeInfo(const string& c, const string& r)
允许编译器帮助您避免此类情况。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- Switch语句不显示除默认语句之外的任何类型的输出
- CMFCToolBar 和 CMFCMenuBar 默认不显示动态项目
- 如何使用C Win32 API在Combobox中默认显示域值
- 显示状态栏默认消息
- 如何使用C Winapi 32在默认值中显示Combobox第二值
- 聚合类正在显示默认构造函数
- 如何显示默认 c++ 对象值
- 显示错误的 QT 默认项目
- C++构造函数并使其显示默认答案
- 访问Ximea相机并使用OpenCV设置预定义的分辨率时,由于相机默认分辨率的大小为Mat,因此显示混乱的输出
- 在变量上显示默认文本,用户可以在C++命令行程序上编辑这些变量
- 默认项目显示在不可编辑的组合框中
- 为什么当窗口在win32上失去焦点时,被覆盖的非客户端区域显示默认值
- 自动完成不显示在xcode中有默认值的函数参数
- 增强构建显示默认工具集和版本
- 显示默认值
- C++继承类没有显示默认构造函数
- 需要一个示例来显示默认构造函数不是继承的
- 如何在QTableView的默认视图中显示超文本?