i have parent class objects
#pragma once #include <string> /* main parent class. */ class object { protected: std::string classname; public: std::string getclassname() { return classname; } }; and have inherited 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 used"; } }; but when try classname in function main - shows empty line.
int main() { skill *s = new skill("unique skill!"); std::cout << "attempt retrieve skill " << s->getclassname(); // show message attempt retrieve skill } what went wrong?
the problem calling single-argument constructor doesn't call zero-argument constructor, classname never set.
if using c++11, can delegate default constructor avoid code duplication:
skill(std::string skillname) : skill(){ this->skillname = skillname; } alternatively, use single constructor default argument:
skill(std::string skillname = "") : skillname(skillname){ classname = "skill"; //better write object constructor handle }
Comments
Post a Comment