MyTetra Share
Делитесь знаниями!
Порядок построения дочерних классов, Спецификатор protected, Типы наследований (public,private,protected), Переопределение методов родительского класса, Множественное наследование
Время создания: 13.06.2020 19:57
Раздел: C++ - Примеры кода - Работа на уроке
Запись: Shut913/Tetra-notes-Programming/master/base/1592067465ydm5cua2go/text.html на raw.githubusercontent.com

#include <iostream>

#include <string>


// == Порядок построения дочерних классов

//class Parent

//{

//public:

// int _id;

//

// Parent(int id = 0) : _id(id) {}

// int getId() const { return _id; }

//};

//

//class Child : public Parent

//{

//public:

// double _value;

//

// Child(double value = 0.0) : _value(value) {}

// double getValue() const { return _value; }

//};

//

//int main()

//{

// Parent parent;

//

// Child child;

// return 0;

//}

//

//

//class A

//{

//public:

// A()

// {

// std::cout << "A constructor\n";

// }

//};

//

//class B : public A

//{

//public:

// B()

// {

// std::cout << "B constructor\n";

// }

//};

//

//class C : public B

//{

//public:

// C()

// {

// std::cout << "C constructor\n";

// }

//};

//

//class D : public C

//{

//public:

// D()

// {

// std::cout << "D constructor\n";

// }

//};

//

//int main()

//{

// std::cout << "\nA creation:\n";

// A a;

//

// std::cout << "\nB creation:\n";

// B b;

//

// std::cout << "\nC creation:\n";

// C c;

//

// std::cout << "\nD creation:\n";

// D d;

//

// return 0;

//}

//

//

//class Parent

//{

//private:

// int _id;

//public:

// Parent(int id = 0) : _id(id) {}

// int getId() const { return _id; }

//};

//

//class Child : public Parent

//{

//private:

// double _value;

//public:

// Child(double value = 0.0, int id = 0):

// Parent(id),

// _value(value)

// {}

//

// double getValue() const { return _value; }

//};

//

//void main()

//{

// Child child(10, 345678);

// std::cout << child.getId();

//}

//

//

//class Human

//{

//public:

// std::string _name;

// int _age;

//

// Human(std::string name = "", int age = 0) :

// _name{ name }, _age{ age } {}

//

// std::string getName() const { return _name; }

// int getAge() const { return _age; }

//};

//

//class Player : public Human

//{

//public:

// int _average;

// int _points;

//

// Player(std::string name, int age, int average = 0, int points = 0):

// Human(name, age),

// _average{average}, _points{points}

// {}

//};

//

//void main()

//{

// Player player("Brus", 35, 5, 145);

//}

//

//

// == Спецификатор protected

//class Parent

//{

//public:

// int _public;

//private:

// int _private;

//protected:

// int _protected;

//};

//

//class Child: public Parent

//{

//public:

// Child()

// {

// _public = 1;

// _private = 2;

// _protected = 3;

// }

//};

//

//void main()

//{

// Child child;

// child._public;

//

// Parent parent;

// parent._public;

//}

//

//

// == Типы наследований

// -- тип public (открытое наследование)

//В родительском классе В дочернем классе

//public public

//private Недоступен

//protected protected

//

// -- тип private

//В родительском классе В дочернем классе

//public private

//private Недоступен

//protected private

//

// -- тип protected

//В родительском классе В дочернем классе

//public protected

//private Недоступен

//protected protected


// == Переопределение методов родительского класса

//class Parent

//{

//public:

// void print()

// {

// std::cout << "Parent!";

// }

//};

//

//class Child : public Parent

//{

////private:

//// using Parent::print; // сокрытие (вариант 1)

//

//public:

// // void print() = delete; // сокрытие (вариант 2)

//

// /*void print()

// {

// Parent::print();

// std::cout << "Child!";

// }*/

//};

//

//int main()

//{

// Child child;

// child.print();

// return 0;

//}


// Множественное наследование

//class Human

//{

//private:

// std::string _name;

// int _age;

//

//public:

// Human(std::string name, int age)

// : _name(name), _age(age)

// {

// }

//

// std::string getName() { return _name; }

// int getAge() { return _age; }

//};

//

//class Employee

//{

//private:

// std::string _employer; // работадатель

// double _salary;

//

//public:

// Employee(std::string employer, double salary)

// : _employer(employer), _salary(salary) {}

//

// std::string getEmployer() { return _employer; }

// double getSalary() { return _salary; }

//};

//

//class Teacher : public Human, public Employee

//{

//private:

// int _rank;

//public:

// Teacher(std::string name, int age, std::string employer, double salary, int rank):

// Human(name, age),

// Employee(employer, salary),

// _rank{rank}

// {}

//};


// == Проблемы множественного наследования

// Problem 1 (конфликт имен)

//class USBDevice

//{

//private:

// long _id;

//

//public:

// USBDevice(long id)

// : _id(id) {}

//

// long getID() { return _id; }

//};

//

//class NetworkDevice

//{

//private:

// long _id;

//

//public:

// NetworkDevice(long id)

// : _id(id) {}

//

// long getID() { return _id; }

//};

//

//class WirelessAdapter : public USBDevice, public NetworkDevice

//{

//public:

// WirelessAdapter(long usbId, long networkId)

// : USBDevice(usbId), NetworkDevice(networkId) {}

//};

//

//int main()

//{

// WirelessAdapter dlink(6334, 292651);

// std::cout << dlink.NetworkDevice::getID(); // какую версию getID() здесь следует вызывать?

//

// return 0;

//}

// Problem 2 (алмаз смерти или ромб неопределенности, алмаз обреченности)

//class PoweredDevice

//{};

//

//class Printer : public PoweredDevice

//{};

//

//class Scanner : public PoweredDevice

//{};

//

//class Copier : public Printer, public Scanner

//{};

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования