Изменение метода - переопределение


При самостоятельном желании понять тему " Изменение метода - переопределение " вам поможет наш ресурс. Для вас наши специалисты подготовили материал, изучив который вы будете разбираться в ней уровне профессионала. А если у вас останутся вопросы, то задать их вы сможете прямо на сайте написав в чат онлайн-консультанта.

оформить заявку

Слишком сложно? Тогда запросите консультацию специалиста!

Наша компания занимается тем, что помогает студентам выполнять различные учебные работы на заказ. Вы можете ознакомиться с перечнем выполняемых работ, а так же с их стоимостью на странице с ценами.

ознакомиться с условиями

Однако метод move() класса vehicle выводит строку "Driving..." (то есть "Еду..."), а для вертолета это не подходит. Следовательно, мы должны переопределить метод move() в классе helicopter так, чтобы он выводил строку "Flying..." (то есть "Лечу..."):
#include <iostream.h>
class vehicle {
public: void start();
void move();
};
class helicopter : public vehicle {
public: void move();
};
void vehicle::start() { cout << "Starting... ";}
void vehicle::move() { cout << "Driving... ";}
void helicopter::move() { cout << "Flying... ";}
.
.
.

Методы start() и move() класса helicopter можно свободно вызывать в функции main():
#include <iostream.h>
class vehicle {
public: void start();
void move();
};
class helicopter : public vehicle {
public: void move();
};
void vehicle::start() { cout << "Starting... ";}
void vehicle::move() { cout << "Driving... ";}
void helicopter::move() { cout << "Flying... ";}
void main()
{
helicopter whirly;
whirly.start();
whirly.move();
}

Программа для демонстрации наследования готова - запустите ее. Результат ее работы изображен на рис. 1.9. Как видно на рисунке, переопределенный метод move() успешно работает и выводит строку "Flying..." вместо "Driving...". В этой программе мы познакомились с техникой наследования и переопределения методов в C++. Ниже приведен полный текст программы из файла inheritance.cpp.

 
Рис. 1.9. Переопределение метода в C++

inheritance.cpp
#include <iostream.h>
class vehicle {
public: void start();
void move();
};
class helicopter : public vehicle {
public: void move();
};
void vehicle::start() { cout << "Starting... ";}
void vehicle::move() { cout << "Driving... ";}
void helicopter::move() { cout << "Flying... ";}
void main()
{
helicopter whirly;
whirly.start();
whirly.move();
}

В этом уроке нам осталось рассмотреть лишь перегрузку функций. Этим мы сейчас и займемся.

Перегрузка функций в C++

В С++ один и тот же метод можно вызывать с различными типами и даже различным количеством параметров. Например, может существовать метод display(), отображающий на экране отдельный символ, используя для этого тип char С++, или же целую строку символов, которая в стандартном C++ интерпретируется как массив символов. Иначе говоря, метод display() может вызываться как для отдельного символа, так и для массива символов. Рассмотрим как это делается на примере новой программы overloading. Создайте проект, а в нем - файл overloading.cpp.




Здесь в функции main() будет создаваться новый объект DisplayObject:
void main()
{
DisplayClass DisplayObject;
.
.
.
}

В этом объекте будет находиться метод display(). Сначала мы вызовем его для отображения единственного символа "h":
void main()
{
DisplayClass DisplayObject;
DisplayObject.display("h");
.
.
.
}

Тот же метод можно вызвать и для строки (то есть массива символов), которая в нашем примере состоит всего лишь из одной буквы "i" (в C++ кавычки говорят о том, что речь идет о строке, а не об отдельном символе):
void main()
{
DisplayClass DisplayObject;
DisplayObject.display("h");
DisplayObject.display("i");
cout << " ";
}

Один и тот же метод вызывается для аргументов двух типов - символа и строки. Но как это сделать? В C++ это совсем не сложно - нужно лишь определить метод дважды, по одному разу для каждого типа предполагаемых параметров. Повторное определение метода display() может выглядеть так:
#include <iostream.h>
class DisplayClass
{
public:
void display(char character);
void display(char* string);
};
void DisplayClass::display(char character)
{
  cout << character;
}
void DisplayClass::display(char* string)
{
cout << string;
}

Но как C++ определяет, какую версию display() использовать при вызове метода? По типу передаваемого параметра. Например, если параметр относится к символьному типу, вызывается версия display() для символьного параметра. Если же передать ему строку, будет использована вторая версия.



Запустите программу; результат ее работы изображен на рис. 1.10. Как видно из рисунка, перегрузка метода display() прошла успешно. В этой книге мы будем пользоваться этой методикой достаточно часто.

 
Рис. 1.10. Перегрузка метода в C++

Ниже приведен полный текст программы из файла overloading.cpp.
overloading.cpp
#include <iostream.h>
class DisplayClass
{
public:
void display(char character);
void display(char* string);
};
void DisplayClass::display(char character)
{
cout << character;
}
void DisplayClass::display(char* string)
{
cout << string;
}
void main()
{
DisplayClass DisplayObject;
DisplayObject.display("h");
DisplayObject.display("i");
cout << " quot;;
}
В этом уроке мы узнали немало нового, познакомились со многими основными понятиями C++ - классами, объектами, наследованием, перегрузкой, переопределением и т. д. В следующем уроке мы увидим, как применить их на практике при создании настоящих программ для Windows. Если изложенный материал не вызвал у вас особых затруднений, переходите к уроку 2. В противном случае вам стоит почитать дополнительную литературу по программированию, потому что в следующем уроке мы займемся Visual C++ вплотную.

Что нового мы узнали?

В этом уроке мы:

· Познакомились с концепциями классов и объектов C++.

· Узнали, как пользоваться наследованием C++.

· Научились пользоваться конструкторами и деструкторами.

· Научились перегружать методы, чтобы они получали параметры различных типов.

· Научились изменять методы базового класса с помощью переопределения C++.

                       

 


Хм, так же просматривали

Заказ

ФОРМА ЗАКАЗА

Бесплатная консультация

Наша компания занимается написанием студенческих работ. Мы выполняем: дипломные, курсовые, контрольные, задачи, рефераты, диссертации, отчеты по практике, решаем тесты и задачи, и многие другие виды заданий. Чтобы узнать стоимость, а так же условия выполнения работы заполните заявку на этой странице. Как только менеджер увидит ваше сообщение, он сразу же свяжется с вами.

Этапность

СОПРОВОЖДЕНИЕ КЛИЕНТА

Получить работу можно всего за 4 шага

01
Оставляете запрос

Оформляете заказ работы, заполняя форму на сайте.

02
Узнаете стоимость

Менеджер оценивает сложность. Узнаете точную цену.

03
Работа пишется

Оплачиваете и автор приступает к выполнению задания.

04
Забираете заказ

Получаете работу в электронном виде на вашу почту.

Услуги

НАШ СЕРВИС

Что мы еще делаем?

icon
Эссе

от 480 рублей

ПОДРОБНЕЕ
icon
Лабораторные работы

от 630 рублей

ПОДРОБНЕЕ
icon
Самостоятельные работы

от 680 рублей

ПОДРОБНЕЕ
icon
Отчеты по практике

от 780 рублей

ПОДРОБНЕЕ
icon
Дневник по практике

от 580 рублей

ПОДРОБНЕЕ
icon
Написание текста

от 80 рублей

ПОДРОБНЕЕ