我的所有对象都有这个父类
#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
}
出了什么问题?
答案 0 :(得分:2)
这是因为您从main
调用的一个参数构造函数将className
变量留空。将构造函数定义更改为
Skill(std::string skillName) {
className = "skill";
this->skillName = skillName;
}
或从中调用其他构造函数(仅适用于C++11
)。
然而,使用初始化列表
会更好Skill(std::string skillName) : skillName(skillName) {
className = "skill";
}