【问题标题】:Can constructor Initializer fields be called with class objects, c++可以用类对象调用构造函数Initializer字段,c ++
【发布时间】:2016-03-04 14:02:08
【问题描述】:

我有两个班级,一个“银行”和一个“帐户”。 Account 的构造函数接受一个 int 和一个字符串。银行应该有两个“帐户”类型的对象。是否可以动态分配字段初始值设定项列表中的两个“帐户”对象而不是静态值?

这是我静态分配它的代码

    class Bank
{
public:
    Bank():checkings( 500, "C"), saving( 300, "s"){} //predfined int and string

private:
    Account checkings;
    Account saving;

};

可以这样做吗?我希望构造函数根据用户输入动态分配其字段。我不断收到错误,所以我不确定我的语法是否错误。

    class Bank
{
public:
    Bank():checkings( int val, string s), saving( int val, string s){} //dynamic

private:
    Account checkings;
    Account saving;

};

另外,如何在.cpp文件中调用这种类型的构造函数?

【问题讨论】:

  • Bank():checkings( int val, string s), saving( int val, string s){} 确实是语法错误。要指定构造函数参数,它们会在该行的第一组 () 之间移动。

标签: c++ class object constructor initializer-list


【解决方案1】:

您不能将声明(如int val)放在成员初始化程序中,只能将表达式(可以是/包括以前声明的变量)。

看起来你可能想要:

class Bank
{
public:
    Bank(int val, std::string s) : checkings(val, s), saving(val, s) {}
    // ...
};

或:

class Bank
{
public:
    Bank(int check_val, std::string check_s,
         int sav_val, std::string sav_s) :
        checking(check_val, check_s), saving(sav_val, sav_s) {}
    // ...
};

【讨论】:

  • 如果我做一个像这样的初始化列表,它会变成定义而不是声明吗?因为当我尝试在 .cpp 文件中添加定义时出现错误
  • 构造函数定义总是有{} 并且可能有一个初始化列表。不是定义的构造函数声明两者都没有,并且在) 之后有一个;
猜你喜欢
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
相关资源
最近更新 更多