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(); } ВыводИспользование перегруженных конструкторов необходимо тогда , когда нужно предусмотреть все возможные формы инициализации при создании обьекта . | |
Просмотров: 3457 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |