13.01.2015 Views

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

};<br />

105<br />

public:<br />

VSecond (AnsiString a, AnsiString b): model (a), firm (b) {}<br />

friend class VFirst;<br />

class VFirst {<br />

VSecond set;<br />

public:<br />

VFirst (AnsiString a, AnsiString b): set (a,b) {}<br />

void Model () { ShowMessage (AnsiString (set.VSecond::model)); }<br />

void Firm () { ShowMessage (AnsiString (set.VSecond::firm)); }<br />

};<br />

void MainVFirstVSecond () {<br />

AnsiString mod = "ATT", frm = "IBM";<br />

VFirst device (mod, frm);<br />

device.Model ();<br />

// AT<br />

device.Firm ();<br />

// IBM<br />

}<br />

Используя дружественные функции, следует помнить, что «подобно<br />

оператору goto, друзья снижают <strong>на</strong>дежность программного кода... Потребность<br />

в объявлении одних классов друзьями других свидетельствует о плохо<br />

продуманной иерархии классов» [9]. Поэтому обращаться к помощи друзей<br />

следует лишь при крайней необходимости.<br />

Полиморфизм<br />

Полиморфизм как способность оди<strong>на</strong>ковых операторов и одноименных<br />

функций к избирательному (зависящему от типа) поведению реализуется в<br />

C++ в первую очередь через механизмы перегрузки (overloading) операторов<br />

и функций.<br />

Суть перегрузки операторов заключается в создании функцииоператора,<br />

использующей в качестве имени лексему operator и следующий за<br />

ней перегружаемый оператор. Объявление перегрузки а<strong>на</strong>логично объявлению<br />

обычной дружественной функции или член-функции класса:<br />

Тип operator з<strong>на</strong>кОперации ( [объявлениеПараметров] );<br />

Перегрузке могут подлежать все простые операторы, за исключением<br />

«.», «.*», «:», «sizeof», «::». Язык не позволяет задать для перегружаемого<br />

оператора иной символ, кроме тех, что определены в списке операторов.<br />

Нельзя изменять синтаксис использования оператора: у<strong>на</strong>рный оператор не

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!