Наследование классов Python для C ++ - PullRequest
0 голосов
/ 25 апреля 2018

Прежде чем приступить к созданию класса C ++, я решил сначала сделать это на Python.

Существовали хорошие источники для создания класса Python, но я не смог найти полезные источники для C ++.

Код Python:

class Human:
    def __init__(self, first, last, age, sex):
        self.firstname = first
        self.lastname = last
        self.age = age
        self.sex = sex
    ...
class Student(Human):
    def __init__(self, first, last, age, sex, school, semester):
        super().__init__(first, last, age, sex)
        self.school = school
        self.semester = semester
    ...

Код C ++:

class Human {
protected:
    string name;
    string lastname;
    int age;
    string sex;
public:
    Human(string name, string lastname, int age, string sex):
    name(name), lastname(lastname), age(age), sex(sex){
    }
    ~Human();
};
class Student: protected Human{
public:
    string school;
    int semester;
    //Student(string school, int semester);
    ~Student();
};

как я могу сделать то же самое в своем коде C ++?

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете вызвать супер-конструктор и инициализировать переменные класса в C ++, используя список инициализаторов .

В качестве упрощенного примера:

class Human {
   int age;
   string name;
 public:
    Human(string name, int age) : age(age), name(name) {} // initializer list
};

class Student : public Human {
    string school;
 public:
    Student(string name, int age, string school)
        : Human(name, age), school(school) {}  // initializer list
}

Human(name, age)часть конструктора студента вызывает конструктор в базовом Human классе.

Ваш закомментированный конструктор Student(string school, int semester) не сможет правильно инициализировать базовый класс Human, так как он не содержит никакогоинформация о Human (имя, возраст, пол и т. д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...