русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Конструктори при множинному успадковуванні


Дата додавання: 2014-04-22; переглядів: 868.


Попередня програма не має конструкторів. Розглянемо приклад, що показує, як працюють конструктори при множинному успадковуванні. Далі приведена програма 11.10 використовує базові типи Type та Distance і похідний від обох цих класів тип Lumber.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

#include<string.h>

class Type

{private:

char *dimensions;

char *grade;

public:

Type():dimensions(“N/A”),grade(“N/A”)

{ }

Type(char *d1,char *d2):dimensions(d1),grade(d2)

{ }

void gettype()

{cout<<”Розмір:”;cin>>dimensions;

cout<<”Сорт:”;cin>>grade;

}

void showtype()

{

cout<<”Розмір:”<<dimensions<<endl;

cout<<”Сорт:”<<grade<<endl;

}

};

///////////////

class Distance

{private:

int feet;

float inches;

public:

Distance():feet(0),inches(0.0)

{}

Distance(int ft,float in):feet(ft),inches(in)

{}

void getdist()

{cout<<”Фути:”;cin>>feet;

cout<<” дюйми:”;cin>>inches;

}

void showdist() const

{

cout<<feet<<”\-“<<inches<<’\”’;

}

};

////////////////

class Lumber:public Type,public Distance

{private:

int quantity;

double price;

public:

Lumber():Type(),Distance(),quantity(0),price(0.0)

{}

Lumber (char *dt, char *gr,

int ft, float in,

int qu,float prc):Type(dt,gr),Distance(ft,in),quantity(qu),price(prc)

{ }

 

void getlumber()

{Type::gettype();

Distance::getdist();

cout<<”Введіть кількість:”;cin>>quantity;

cout<<”Введіть ціну:”;cin>>price;

}

 

void showlumber()const

{

Type::showtype();

cout<<”\n Dovjyna:”;

Distance::showdist();

cout<<”\n Вартість ”<<quantity<<” штук:”<<(price*quantity);

}

};

///////////////

int main()

{clrscr();

Lumber studs;

cout<<”\n Інформація\n”;

studs.getlumber();

Lumber studs1(“2x4”,”const”,8,1.0,200,14);

cout<<”\n1=”;studs.showlumber();

cout<<”\n2=”;studs1.showlumber();

 

bioskey(0);

return 0;

}

Програма 11.10

 

Головною особливістю цієї програми є використання конструкторів похідного класу Lumber. Вони викликають підходящі конструктори класів Type і Distance.

 

Конструктори без аргументів

В класі Type конструктор без аргументів виглядає так:

Type():dimensions(“N/A”),grade(“N/A”)

{ }

Цей конструктор присвоює значенням полів dimensions та grade значення рядка "N/A” (недоступно), тому при спробі вивести дані для об’єкту класу Lumber користувач знатиме, що поля порожні.

Ми вже використовували конструктор без аргументів в класі Distance

Distance():feet(0),inches(0.0)

{}

Конструктор без аргументів класу Lumber викликає конструктори обох класів – Type і Distance

Lumber():Type(),Distance(),quantity(0),price(0.0)

{}

Імена конструкторів базового класу вказані після двокрапки і розділені комами. При виклику конструктора класу Lumber починають роботу конструктори базових класів Type() і Distance(). При цьому ініціалізуються змінні quantity і price().

 

Конструктор з багатьма аргументами

Конструктор класу Type з двома аргументами виглядає так:

Type(char *d1,char *d2):dimensions(d1),grade(d2)

{ }

Цей конструктор копіює рядкові аргументи (типу char *) в поля класу dimensions та grade.

Конструктор класу Distance той сам, що і в попередній програмі

Distance(int ft,float in):feet(ft),inches(in)

{}

В конструктор класу Lumber включені обидва ці конструктори, які одержують значення аргументів.

Lumber (char *dt, char *gr,

int ft, float in,

int qu,float prc):Type(dt,gr),Distance(ft,in),quantity(qu),price(prc)

{ }

 

Крім того, клас Lumber має і свої власні аргументи. Таким чином, всього у конструктора 6 аргументів.


<== попередня лекція | наступна лекція ==>
Методи класів та множинне успадковування | Невизначеність при множинному успадковуванні


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн