2012-07-08 67 views
1

我有一些班级在这里:如何正确使用继承,同时保持高效?

class weapons 
{ 
protected: 
    int damage, armor, cost; 
}; 

class sword : public weapons 
{ 
public: 
    // Initialization for the sword class. 
    void initialize() 
    { 

    } 
}; 

class shield : public weapons 
{ 

}; 

我开始这些工作,我不记得如何设置的伤害,护甲,并为每个继承类的成本。我该怎么做呢?什么是快捷方式(不一定很容易)?

回答

6

在类中设置变量的正确方法是通过类的构造函数。派生类应该使用初始化器列表来设置其基类中的变量。

class weapon { 
protected: 
    int damage, armor, cost; 
    weapon(int d, int a, int c) : damage(d), armor(a), cost(c) {} 
}; 

class sword : public weapon { 
private: 
    int weight; 
public: 
    sword(int d, int a, int c, int w) : weapon(d, a, c), weight(w) {} 
}; 

替换地,如果子类控制在基座中的值(即,用户未通过damagearmor,或cost可以做到这一点:

sword(int w) : weapon(30, 5, 120), weight(w) {} 

编译器将优化此代码到内联的东西正确,所以你不应该担心增加额外的构造函数层造成的性能损失。

+0

没错。我以为我错过了一些东西。谢谢。还有一个关于这个问题。我需要一个'{}'还是可以使用';'? – VinylScratch 2012-07-08 16:16:56

+0

@VinylScratch C++语法需要在方法体和构造函数体周围使用一对大括号,所以不能为构造函数的空主体使用独立的非操作“分号”语句。 – dasblinkenlight 2012-07-08 16:21:41

1

只需在儿童班中使用它们即可。因为这些属性在父级中被定义为受保护的,所以可以像子级中的普通变量一样访问它们。像这样:

damage = 60; 
armor = 0; 
cost = 42; 
1
class weapons 
{ 
protected: 
    int damage, armor, cost; 
    weapons(int d, int a, int c): 
     damage(d), armor(a), cost(c) { } 
}; 

class sword: public weapons { 
    public: 
    sword(): weapons(10, 12, 31) { } 
} 
class shield: public weapons { 
    public: 
    shield(): weapons(1, 22, 48) { } 
}