"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора for (int i = 0; i
void error(char* p) { cerr << p << "\n"; exit(1); } void vector::set_size(int) { /*...*/ } int& vec::operator[](int i) { /*...*/ } main() { Vec a(10); Vec b(10); for (int i=0; i 1.15 Друзья (friend) Функция operator+() не воздействует непосредственно на представление вектора. Действтельно, она не может этого делать, поскольку не является членом. Однако иногда желательно дать функциям не членам возможность доступа к закрытой части класса. Например, если бы не было функции "доступа без проверки" vector::elem(), вам пришлось бы проверять индекс i на соответствие границам три раза за каждый проход цикла. Здесь мы избежали этой предоставления права доступа к своей закрытой части функциям не членам. Просто в описание класса помещается описание функции, перед которым стоит ключевое слово friend. Например, если имеется class Vec; // Vec - имя класса class vector { friend Vec operator+(Vec, Vec); //... }; - стр 43 - То вы можете написать Vec operator+(Vec a, Vec b) { int s = a.size(); if (s != b.size()) error("плохой размер вектора для +"); Vec& sum = *new Vec(s); int* sp = sum.v; int* ap = a.v; int* bp = b.v; while (s--) *sp++ = *ap++ + *bp++; |
|
|