return *this;

}

str_type str_type::operator=(char *str)

{

 str_type temp;

 strcpy(string, str);

 strcpy(temp.string, string);

 return temp;

}

str_type str_type::operator+(char *str)

{

 str_type temp;

 strcpy(temp.string, string);

 strcat(temp.string, str);

 return temp;

}

int main()

{

 str_type а("Привет "), b("всем"), с;

 с = а + b;

 с.show_str();

 cout << "\n";

 а = "для программирования, потому что";

 а.show_str();

 cout << "\n";

 b = с = "C++ это супер";

 с = c + " " + а + " " +b;

 с.show_str();

 return 0;

}

При выполнении эта программа отображает на экране следующее.

Привет всем

для программирования, потому что

C++ это супер для программирования, потому что C++ это супер

Прежде чем переходить к следующей главе, убедитесь в том, что до конца понимаете, как получены эти результаты. Теперь вы можете сами определять другие операции над строками. Попытайтесь, например, определить операцию удаления подстроки на основе оператора "-". Так, если строка объекта А содержит фразу "Это трудный-трудный тест", а строка объекта В — фразу "трудный", то вычисление выражения А-В даст в результате "Это - тест". В данном случае из исходной строки были удалены все вхождения подстроки "трудный". Определите также "дружественную" функцию, которая бы позволяла строке с завершающим нулем находиться слева от оператора "+". Наконец, добавьте в программу код, обеспечивающий контроль за ошибками.

Важно!Для создаваемых вами классов всегда имеет смысл экспериментировать с перегрузкой операторов. Как показывают примеры этой главы, механизм перегрузки операторов можно использовать для добавления новых типов данных в среду программирования. Это одно из самых мощных средств C++.

<p id="chapter 14">Глава 14: Наследование</p>

Наследование — один из трех фундаментальных принципов объектно-ориентированного программирования, поскольку именно благодаря ему возможно создание иерархических классификаций. Используя наследование, можно создать общий класс, который определяет характеристики, присущие множеству связанных элементов. Этот класс затем может быть унаследован другими, узкоспециализированными классами с добавлением в каждый из них своих, уникальных особенностей.

В стандартной терминологии языка C++ класс, который наследуется, называется базовым. Класс, который наследует базовый класс, называется производным. Производный класс можно использовать в качестве базового для другого производного класса. Таким путем и строится многоуровневая иерархия классов.

Понятие о наследовании

Базовый класс наследуется производным классом.

Язык C++ поддерживает механизм наследования, позволяя в объявление класса встраивать другой класс. Для этого базовый класс задается при объявлении производного. Лучше всего начать с примера. Рассмотрим класс road_vehicle, который в самых общих чертах определяет дорожное транспортное средство. Его члены данных позволяют хранить количество колес и число пассажиров, которое может перевозить транспортное средство.

class road_vehicle {

  int wheels;

  int passengers;

 public:

  void set_wheels(int num) { wheels = num; }

  int get_wheels() { return wheels; }

  void set_pass(int num) { passengers = num; }

  int get_pass() { return passengers; }

};

Это общее определение дорожного транспортного средства можно использовать для определения конкретных типов транспортных средств. Например, в следующем фрагменте путем наследования класса road_vehicle создается класс truck (грузовых автомобилей).

class truck : public road_vehicle {

  int cargo;

 public:

  void set_cargo(int size) { cargo = size; }

  int get_cargo() { return cargo; }

  void show();

};

Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги