|
|||||||
Порядок построения дочерних классов, Спецификатор 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 //{}; |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|