-1

我想提供一个具有成员函数的类,该函数将分别初始化类的所有成员。

例如

#include <iostream>

using namespace std;
int x = 10;

class my{
  public:
    my():init{}
     int &i;
     void init()
     {
        i = x;
     }
};

int main()
{
  my m;
  return 0;
}

我知道我是否可以使用"class my : i(init())"will work,但我有一些特殊的目的可以像上面那样初始化。

但是在上面的示例中,我收到以下错误:

“my”类没有任何名为“initMy”的字段。

如何解决这个问题?

4

3 回答 3

1

如果您尝试为 编写构造函数class my,则必须使用类名对其进行命名。initMy假设这是您尝试子类化的另一个类的名称,以下将起作用。

class my : initMy
{
  public:
    int i;
    my() {
      i = 10;
    }
};
于 2014-12-19T06:28:41.933 回答
0

您可能会尝试预初始化所有字段,然后在构造函数中调用初始化函数:

class my {
 public:
  int i;
  void initMy() {
    i = 10;
  }
  my() : i(0) { initMy(); };
};

您还可以(在 C++11 中)为私有构造函数定义一个奇怪的签名,并将构造函数委托给它

class my {
  private:
    void initMy () { i=10; };
    enum privateen {privatev};
    my(enum privateen) : i(0) { initMy(); };
  public:
    my() : my(privatev) {};
    int i;
};

实际上,我认为您的初始化应该在构造函数中,而不是在其他函数中。

于 2014-12-19T06:32:08.093 回答
0

这里有几件事需要澄清。

  1. 成员初始化列表用于初始化成员(与构造函数的目的大多相同)。在初始化列表中与成员函数无关。在这个例子age(newAge)中不是一个函数。它正在初始化age变量。

class Man{
    private:
        int age;
        string name;

    public:
        Man(int newAge):age(newAge),name("Jhon"){}  
    };`

  1. 您可以使用构造函数来初始化类的成员。

class Man{
private:
    int age;
    string name;

public:
    Man(int newAge)
    {
        age = newAge;
        name = "Jhone";
    }  
};

  1. 或者init,如果您在使用构造函数时遇到问题,也可以使用一种方法进行初始化。

class Man{
    private:
        int age;
        string name;

    public:
        Man(){}
        init(int newAge, string newName)
        {
            age = newAge;
            name = newName;
        }  
    };

  1. 如果只需要设置类中一个成员的值,则必须使用 setter 方法

类人{私人:整数年龄;字符串名称;

public:
    Man(){}
    setAge(newAge)
    {
     age = newAge;
    }
    setName(newName)
    {
      name = newNAme
    }

};

编辑:

class Man{
    private:
        int age;
        string name;

    public:
        Man(initAge, initName)
        {
            setValues(initAge, initName);
        }

        setValues(newAge, newName)
        {
         age = newAge;
         name = newName;
        }        

    };

  int main()
  {
   Man goodMan(34,"Jhon");
   goodMan.setValues(45,"Kevin");
  }
于 2014-12-19T06:44:39.477 回答