我想提供一个带有成员函数的类,它将分别初始化类的所有成员。
e.g。
#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())"
会起作用,但我有一些特殊目的可以像上面那样进行初始化。
但是在上面的例子中,我收到了以下错误:
class'my'没有任何名为'initMy'的字段。
如何解决这个问题?
答案 0 :(得分:1)
如果您正在尝试为class my
编写构造函数,则必须使用类名命名。假设initMy
是您尝试子类化的另一个类的名称,以下内容将起作用。
class my : initMy
{
public:
int i;
my() {
i = 10;
}
};
答案 1 :(得分: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;
};
实际上,我认为你的初始化应该在构造函数中,而不是在其他函数中。
答案 2 :(得分:0)
这里要澄清一些事情。
age(newAge)
不是函数。它正在初始化age
变量。class Man{
private:
int age;
string name;
public:
Man(int newAge):age(newAge),name("Jhon"){}
};`
class Man{
private:
int age;
string name;
public:
Man(int newAge)
{
age = newAge;
name = "Jhone";
}
};
init
方法进行初始化。class Man{
private:
int age;
string name;
public:
Man(){}
init(int newAge, string newName)
{
age = newAge;
name = newName;
}
};
类Man { 私人的: 年龄; 字符串名称;
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");
}