| HTML [44] |
| Visual C++ и MFC [21] |
| c++ [78] |
| php [19] |
| Javascript [15] |
| C# [51] |
| загрузки [0] |
|
XNA [10]
создание игр с помощью xna
|
| Главная » Статьи » c++ |
Итак продолжаем подвиги на стезе обучения !!! Первым пунктом нашей программы будут Перегруженные конструкторы. К этому моменту вы уже знаете этих 2 слова по отдельности и иногда можете попугать знакомых ими. Экскурс в историюРазные функции могут иметь одно и то же имя, если у этих функций различны количество и/или типы параметров. Это называется перегрузкой функции. А сами функции перегруженными. Обрабатывая вызов перегруженной функции, компилятор смотрит не только на ее имя, но и на список параметров. По количеству и типам передаваемых параметров компилятор может определить, какую же из одноименных функций нужно вызывать в данном случае. Пример//Предположим у вас возникла необходимость написать программу для ввода
//чисел разного типа. Перед вводом числа будет выдаваться подсказка о
//вводимом типе. Это эффектно реализуется с помощью перегрузки !!!
#include <iostream.h>
//У нас есть перегруженная функция под названием EnterDigit, которая
//принимает 2 параметра . Существует 2 определения этой функции:
//В первой версии , принимаемые аргументы - это char * и int & .
//В второй версии char * и double & .
//В зависимости от типа переданных значений вызывается соответствующая
//версия .
void EnterDigit (char *str , int &i){
cout<<str;
cin>>i;
}
void EnterDigit (char *str , double &i){
cout<<str;
cin>>i;
}
void main(){
int i;
double d;
//Вызов версии void EnterDigit (char *str , int &i)
// так как второй параметр имеет тип int
EnterDigit("Enter an integer :",i);
//Вызов версии void EnterDigit (char *str , int &i)
// так как второй параметр имеет тип double
EnterDigit("Enter a double :",d);
//Вывод результатов на экран
cout<<i<<" "<<d;
}
Послесловие к примеруИтак мы рассмотрели пример на перегрузку функций . Я надеюсь вы вспомнили,что такое перегруженная функция и с чем её едят. Маленькое замечаниеХотя можно использовать одно и то же имя для перегрузки функций, выполняющих совершенно разные действия, делать этого не стоит. Так как смысл перегрузки - выполнение схожих действий. Конец экскурса О конструкторах вы читали в предыдущем урок.Конструктор - тоже функция отсюда следует вывод !!! Его можно перегрузить . При этом на его перегрузку будут распостраняться все те же правила, которые используются при обычной перегрузке функций .Возникает вопрос , а зачем мне собственно говоря перегружать конструктор ? Для того чтобы при создании обьекта класса вы могли предусмотреть различные способы инициализации . Пример//Напишем класс таймер с перегруженным конструктором.
#include <iostream.h>
#include <stdlib.h>
// В библиотеке stdlib.h находится функция
// atoi (её прототип int atoi( const char *string ) ) ,
// которая конвертирует строку в число. Строка задаётся в качестве
// параметра , возвращаемое значение и будет полученным числом
// Ниже у нас определено 3 версии перегруженного конструктора, которые
// охватывают все возможные случаи инициализации .
class timer {
int seconds;
public:
// Первый перегруженный конструктор предназначен для инициализации
// обьекта с помощью строки
timer(char *t){
seconds=atoi(t);
cout<<" char * "<< "\n";
}
// Второй перегруженный конструктор предназначен для инициализации
// обьекта с помощью целого числа
timer(int t){
seconds=t;
cout<<" int "<< "\n";
}
// Третий перегруженный конструктор предназначен для инициализации
// обьекта с помощью 2 целых чисел ( минут и секунд )
timer(int min,int sec){
seconds=min*60+sec;
cout<<" int , int "<< "\n";
}
// Функция для показа количества секунд
void ShowTime(){
cout<<"Seconds : "<<seconds<<"\n";
}
};
void main(){
// Обьявления переменных
//Строковый массив для хранения секунд
char s[20];
//Переменная целого типа для хранения секунд
int sec;
//Переменная целого типа для хранения минут
int min;
// Ввод секунд в строковую переменную
cout<< "Put seconds : "<<" \n ";
cin>> s ;
// Ввод секунд в переменную целого типа
cout<< "Put seconds one more time : "<<" \n ";
cin>> sec ;
// Ввод минут в переменную целого типа
cout<< "Put minutes : "<<" \n ";
cin>> min ;
// Создание 3-х обьектов класса таймер
timer a(s), b(sec), c( min, sec);
// Показ значений секунд
a.ShowTime();
b.ShowTime();
c.ShowTime();
}
ВыводИспользование перегруженных конструкторов необходимо тогда , когда нужно предусмотреть все возможные формы инициализации при создании обьекта . | |
| Просмотров: 3491 | Рейтинг: 0.0/0 |
| Всего комментариев: 0 | |