在类实例化期间未设置继承值
not set inherited value during class instantiation
所有对象都有父类
#pragma once
#include <string>
/*
Main parent class.
*/
class Object
{
protected:
std::string className;
public:
std::string getClassName() {
return className;
}
};
我继承了class
#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";
}
};
但是当我尝试在函数main
中获得className
时-它显示空行。
int main()
{
Skill *s = new Skill("Unique skill!");
std::cout << "Attempt to retrieve skill " << s->getClassName(); // show only message Attempt to retrieve skill
}
出什么事了?
问题是调用单参数构造函数不会调用零参数构造函数,所以className
永远不会被设置。
如果你使用的是c++ 11,你可以委托给你的默认构造函数来避免代码重复:
Skill(std::string skillName) : Skill(){
this->skillName = skillName;
}
或者,您可以使用带有默认实参的单个构造函数:
Skill(std::string skillName = "") : skillName(skillName){
className = "skill"; //better to write an Object constructor to handle this
}
这是因为您从main
调用的单参数构造函数使className
变量为空。将构造函数定义更改为
Skill(std::string skillName) {
className = "skill";
this->skillName = skillName;
}
或从this调用其他构造函数(仅在C++11
中有效)。
更好的方法是使用初始化列表
Skill(std::string skillName) : skillName(skillName) {
className = "skill";
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 模板的继承参数设置
- 将复制构造函数设置为默认值在继承自 QObject 时不起作用
- 类是否可以在其构造函数的参数中设置它从另一个类继承的变量的值
- Newbie到C :麻烦设置从Anothe类继承的类中的类构造函数
- 为什么在使用此基本继承设置时出现链接器错误
- MFC C++ 无法在动态创建的 CButton 继承对象上设置映像
- 是否可以继承QVBoxLayout并将其设置为QWidget中的布局
- 是否可以继承模板类并将类型设置为当前尝试从中继承的类的模板化子类?
- 问题:何时使用继承与设置属性
- 继承-如何根据类设置静态变量
- C++类继承设置"classA"数据成员等于"ClassB"
- 为具有多重继承的一个类型设置默认构造函数
- 在对象继承中构造对象后设置稍后的值
- 多类继承设置问题
- 将继承的成员设置为静态
- 在类实例化期间未设置继承值
- 如何设置一个元表来继承另一个元表,同时将userdata更改为另一种类型?
- 设置类名继承和显示在另一个类中
- 如何在c++中创建继承结构时设置父成员