Добавил:
владимир Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_С++ / Лабы / ООП_Лабораторная работа №4.doc
Скачиваний:
0
Добавлен:
17.08.2025
Размер:
207.36 Кб
Скачать

Передача параметров в базовый класс

До тех пор, пока конструкторы не имеют аргументов, от производно­го класса не требуется каких-либо специальных действий. Однако, когда базовый класс имеет конструктор с аргументами, производные классы должны явным образом обрабатывать эту ситу­ацию путем передачи базовому классу необходимых аргументов.

Для передачи параметров используется расши­ренная форма конструкторов производных классов, когда часть аргументов предназначается только для передачи в базовый класс.

#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;

// базовый класс (зона 1)

class student

{ string name; // private-данные

protected: string adr; // protected-данные

// public область- до конца класса все элементы открытые

public: int age; // public-данные

student(string cname, string cadr, int cage): name(cname),adr(cadr),age(cage) {}

student(student& s)

{ name=s.name;

adr=s.adr;

age=s.age;

}

// методы для внешнего доступа

string getname() // передача указателя

{return name;} // во внешнюю

string getadr() // программу

{return adr;}

// внешний ввод данных

// запись текста в закрытую область

void setname (string n) {name=n;}

void setadr (string n) {adr=n;}

}; //--- конец определения базового класса

//--------------- Класс-наследник, тип наследования public (зона 2)

class itog: public student

{ int test; // private-данные

protected: int lab;

public: int bdz; //public область

itog(student& cstud, int ctest, int clab, int cbdz)

:student(cstud)

{test=ctest;

lab=clab;

bdz=cbdz;

}

itog(string cname, string cadr, int cage, int ctest, int clab, int cbdz)

: student(cname,cadr,cage)

{test=ctest;

lab=clab;

bdz=cbdz;

}

//--- методы для внешнего доступа

// передача данных во внешнюю программу (чтение)

int get_lab()

{return lab;}

int get_test ()

{return test;}

// Derived-метод

void set_itog(char* n, char* a, int g, int t, int l, int b)

{ getname()=n;

adr=a;

age=g;

test=t;

lab=l;

bdz=b;

}

}; //-- конец определения произв. класса

int _tmain(int argc, _TCHAR* argv[])

{student S("Иванов","Общежитие МИЭТ",20); // Base - пользователь

itog T1(S,3,4,5); // Derived - пользователь

S.age=27;

T1.set_itog("Петров","Зеленоград", 22, 25, 30, 12);

cout<< "Итоги для: "<<T1.getname() ;

cout<<", адрес " <<T1.getadr();

cout<<", возраст: "<<T1.age;

// доступ к своим данным

cout<<"\nБаллы : \n по тестам "<<T1.get_test();

cout<<"\n по лабам "<<T1.get_lab();

cout<< "\n по БДЗ "<<T1.bdz;

cout<< endl;

system ("pause");

return 0;

}

Типы наследования (уровни доступа к базовому классу)

Рассмотрим несколько зон программы:

  1. Базовый класс (Base)

  2. Производный класс (Derived)

  3. Внешняя программа (main)

Методы базового класса всегда (при всех типах наследования) доступны из методов производного класса

Во внешней программе могут создаваться различные объекты ():

  • пользователи (объекты) базового класса

  • пользователи (объекты) производного класса

Тип наследования задает правила работы с данными и методами относительно 3-х зон и 2-х типов пользователей.