c++ - not set inherited value during class instantiation -


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