在类实例化期间不设置继承值

时间:2015-07-16 09:38:33

标签: c++

我的所有对象都有这个父类

#pragma once
#include <string>
/*
    Main parent class.
*/
class Object
{
protected:
    std::string className;
public:
    std::string getClassName() {
        return className;
    }
};

我继承了班级

#pragma once
#include "object.cpp"

#include <iostream>

class Skill : public Object
{
private:
    Skill() {
        className = "skill";
    }
    std::string skillName;
public:
    Skill(std::string skillName) {
        this->skillName = skillName;
    }
    void useSkill() {
        std::cout<<"Skill is used";
    }
};

但是,当我尝试在className函数中获取main时,它显示为空行。

int main()
{
    Skill *s = new Skill("Unique skill!");
    std::cout << "Attempt to retrieve skill " << s->getClassName(); // show only message Attempt to retrieve skill
}

出了什么问题?

1 个答案:

答案 0 :(得分:2)

这是因为您从main调用的一个参数构造函数将className变量留空。将构造函数定义更改为

Skill(std::string skillName) {
    className = "skill";
    this->skillName = skillName;
}

或从中调用其他构造函数(仅适用于C++11)。

然而,使用初始化列表

会更好
Skill(std::string skillName) : skillName(skillName) {
    className = "skill";
}