Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <set>
- #include <string>
- #include <iostream>
- using namespace std;
- // Человек
- class Person {
- public:
- Person(string name, int age, string gender) : name_(name), age_(age), gender_(gender) {};
- string GetName() const {
- return name_;
- }
- int GetAge() const {
- return age_;
- }
- string GetGender() const {
- return gender_;
- }
- // изменили расположение полей в родительском классе
- string name_;
- protected:
- int age_;
- private:
- string gender_;
- };
- // Программист. Знает несколько языков программирования
- class Programmer : public Person {
- public:
- Programmer(string name, int age, string gender) : Person(name, age, gender) {}; // если нет конструктора по умолчанию, а есть параметризованный конструктор, то обязательно вызываем его
- void AddProgrammingLanguage(string language) {
- programming_languages_.insert(language);
- }
- bool CanProgram(string language) const {
- return programming_languages_.count(language);
- }
- // добавили методов программисту для обращения полям родительского класса
- void PrintName() const {
- cout << name_ << endl;
- }
- void PrintAge() const {
- cout << age_ << endl;
- }
- /*void PrintGender() const {
- cout << gender_ << endl;
- }*/
- private:
- set<string> programming_languages_;
- };
- // Рабочий. Владеет несколькими специальностями
- class Worker : public Person {
- public:
- Worker(string name, int age, string gender) : Person(name, age, gender) {};
- void AddSpeciality(string speciality) {
- specialties_.insert(speciality);
- }
- bool HasSpeciality(string speciality) const {
- return specialties_.count(speciality);
- }
- private:
- set<string> specialties_;
- };
- int main() {
- setlocale(LC_ALL, "ru");
- Programmer pr("Иван", 22, "man");
- Worker wk("Гена", 23, "man");
- // поле public
- //cout << pr.name_ << endl; // доступно из внешнего кода (через точку)
- //cout << pr.GetName() << endl;// можем обращаться внутри родительского класса (GetName())
- //pr.PrintName();// можем обращаться внутри дочернего класса (PrintName())
- // поле private
- //cout << pr.gender_ << endl; // здесь ошибка - не доступно из внешнего кода (через точку)
- //cout << pr.GetGender() << endl; //можем обращаться внутри родительского класса (GetGender())
- //pr.PrintGender(); // не можем обращаться внутри дочернего класса(PrintGender() не заработает)
- // поле protected
- //cout << pr.age_ << endl; // здесь ошибка - не доступно из внешнего кода (через точку)
- //cout << pr.GetAge() << endl;// можем обращаться внутри родительского класса (GetAge())
- //pr.PrintAge();// можем обращаться внутри дочернего класса(PrintAge())
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement