c++ - 在条件 C++ 语句中创建对象

标签 c++ class object if-statement constructor

我正在学习 c++,我刚刚进入面向对象的章节。我有一个关于在 if 语句中创建对象的问题。

我正在处理的问题是创建一个显示报告标题的类。该类有一个默认构造函数,将公司名称和报告名称设置为通用事物,并且如果用户需要,还有一个带有两个参数(字符串公司名称和报告名称)的构造函数。

问题是,具体来说,“一个两参数的默认构造函数应该允许在创建新的报告对象时指定这些 [公司和报告名称]。如果用户在没有传递任何参数的情况下创建报告对象,使用默认值。否则,使用用户指定的名称值。"

所以我的问题是,如何创建这些对象?我了解如何创建不带任何参数的对象(即 Report newobj;),以及带参数的对象(即 Report newobj(string string);)。基本上,我最初在主函数的顶部了解了如何创建这些对象。但是是否可以根据用户选择在 if 语句中创建它们?这是我到目前为止所拥有的,显然,它不起作用:

#include <iostream>
#include <string>
#include "report.h"
using namespace std;

bool enter_company_name();           // return true if user wants to enter company name
bool print_form();              // return true if user wants to print in formatted output

int main()
{
  string company_name,
    report_name;
  bool name = false,
    format = false;

  name = enter_company_name();
  format = print_form();

  if (name)
    {
      cout << "Enter company name: ";
      getline(cin, company_name);
      cout << "Enter report name: ";
      getline(cin, report_name);
      Report header(company_name, report_name);  // THIS IS MY PROBLEM
    }
  else
      Report header;  // THIS IS MY PROBLEM

  if (format)
    header.print_formatted();
  else
    header.print_one_line();

  return 0;
}

bool enter_company_name()
{
  char choice;

  cout << "Do you want to enter a name?\n>";
  cin >> choice;

  if (choice == 'y' || choice == 'Y')
    return true;
  else
    return false;
}

bool print_form()
{
  char choice;

  cout << "Do you want to print a formatted header?\n>";
  cin >> choice;

  if (choice == 'y' || choice == 'Y')
    return true;
  else
    return false;
}

所以如果没有指定,我想使用默认值创建一个对象,或者如果这是给定的选择,则使用用户值创建一个。我只是不知道如何在 C++ 中交互地做到这一点。到目前为止,我无法在任何地方找到任何类似的问题。

我遇到的最接近的事情是使用指针来做类似于我想做的事情,但是我正在使用的书还没有得到指针,我想尝试找出一种方法来做它保持在我正在工作的章节的范围内(即不使用指针)。

我没有包含头文件或类实现文件,因为我认为它们在这里不相关。

提前谢谢你!

最佳答案

首先,您不能在条件语句中创建对象并在条件语句之后使用它:条件语句的两个分支分别创建一个范围,并且在分支的末尾被销毁的任何对象。也就是说,你需要想出一个不同的方法。最简单的方法可能是将对象的创建委托(delegate)给一个函数,该函数会根据需要返回对象:

Report makeReport() {
    if (enter_company_name()) {
        ...
        return Report(name, company);
    }
    return Report();
}

...
Report report = makeReport();

另一种方法是使用三元运算符以一种或另一种方式有条件地创建 Report:

bool get_company_name = enter_company_name();
std::string name(get_company_name? read_name(): "");
std::string company(get_company_name? read_company(): "");
Report report = get_company_name? Report(name, company): Report();

所有这些方法都假定 Report 类实际上是可复制的。

关于c++ - 在条件 C++ 语句中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346477/

相关文章:

JavaScript Object.create——继承嵌套属性

javascript - 如何在javascript中使用对象值作为对象名称?

c++ - 为什么十六进制地址是 14 个字符?

android - 如何为 gSoap-OpenSSL Android 应用程序存储和加载 cacerts.pem

PHP Profiler - 使用 C++ 从 PHP 扩展获取客户端 IP 和 URL

java - 实现接口(interface)的类列表

来自不同(包含)文件的 PHP 类私有(private)变量集

c++ - 当将值复制到现有对象中时,(N)RVO 是否也会发生?

swift - SpriteKit 从类中调用函数

object - Amazon S3 获取上传文件的版本列表