在标题中:
class foo : public ISceneNode
{
public:
foo(){}
void setAge(int a) { age = a; }
int getAge(){ return age; }
private:
int age;
}
来源:
foo::foo()
:ISceneNode(0,0)
{
age = 5;
}
例如,我有一个带有成员变量的类。成员变量是5。 主要:
foo* node = (foo*)smgr->addCubeSceneNode(2);
int age = node->getAge();
它有效,但问题是,程序现在不知道成员变量,因为我没有使用new创建foo()。所以,getAge()方法什么都不返回!
我的问题是,如何初始化成员变量?
谢谢。
答案 0 :(得分:0)
您的变量age
未标记为public
。这是您无法从课外访问它的原因。使用new
创建对象与您的问题无关。
class foo : public ISceneNode
{
foo(){}
public:
int age;
};
无关的说明:您可能也希望公开foo()
。
答案 1 :(得分:0)
类的成员变量通常被声明为私有变量,因为我们可以防止不受保护的访问。
class foo: public ISceneNode
{
foo(){}
int age;
};
这个snipet创建了一个名为foo的类(通常,我们将类名称大写,例如Foo),它派生自ISceneNode。这是“是-a”的关系。
关键字类表示默认访问规则是私有的,而关键字 strcut 表示公开。
非静态成员变量通过构造函数初始化。如前所述,您的构造函数是私有的,您无法通过对象访问它。
foo obj; // not allowed
如果你添加“public:”
class foo: public ISceneNode
{
int age;
public:
foo(){age = 5;}
};
foo obj; // ok, age now equals 5;
但是你还必须处理基类的初始化。上面的代码要求基类有一个默认的构造函数。