初始化派生类?

时间:2014-05-25 03:11:03

标签: c++ derived-class

在标题中:

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()方法什么都不返回!

我的问题是,如何初始化成员变量?

谢谢。

2 个答案:

答案 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;

但是你还必须处理基类的初始化。上面的代码要求基类有一个默认的构造函数。