相关疑难解决方法(0)

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

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

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

问题是,具体而言,"双参数默认构造函数应该允许在创建新的Report对象时指定这些[公司和报告名称].如果用户创建Report对象而不传递任何参数,请使用默认值值.否则,使用用户指定的名称值."

所以我的问题是,如何创建这些对象?我理解如何创建一个没有任何参数的对象(即Report newobj;),以及参数(即Report newobj(string string);).基本上,我首先了解如何在main函数的顶部创建这些对象.但是可以根据用户选择在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); …
Run Code Online (Sandbox Code Playgroud)

c++ constructor if-statement class object

13
推荐指数
4
解决办法
1万
查看次数

使用默认构造函数强制未初始化的成员声明

我今天发现了这个现象,其中一个成员被不必要地构造了两次:

#include <iostream>

class Member {
public:
    Member() {
        std::cout << "Created member (default)" << std::endl;
    }

    Member(int i) {
        std::cout << "Created member: " << i << std::endl;
    }
};

class Object {
    Member member;

public:
    Object() {
        member = 1;
    }
};

int main() {
    Object o;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法声明成员未初始化- 而不是使用默认构造函数 - 从而迫使您在构造函数中使用初始化列表?

在 Java 中,如果您像这样定义一个成员:Member i;并且您没有在每个构造函数中初始化它,那么在尝试使用它时,您将收到一个错误,指出该字段可能未初始化。

如果我从Member类中删除默认构造函数,我会得到我想要的行为 - 编译器强制您为每个构造函数使用初始化列表 - 但我希望这通常发生,以防止我忘记使用这种形式(当默认构造函数可用时)。


本质上,我想要防止错误地使用默认构造函数,但它看起来不存在......

即使使用explicit关键字标记构造函数,Member member仍然会生成一个成员 - 在构造函数中重新分配时会立即丢弃该成员。这本身似乎也不一致...... …

c++

10
推荐指数
2
解决办法
1384
查看次数

标签 统计

c++ ×2

class ×1

constructor ×1

if-statement ×1

object ×1