Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2014, 10:13   #1
dykee
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 78
По умолчанию наследование, перегрузка функций и вывода в поток и вывод с потока

Задание вообще такое:
С++
Створити ієрархію типів - море, залив і бухта. . Класи повинні містити конструктори, включаючи конструктор копіювання, віртуальні деструктор, перевантажені функції виводу в потік і введення з потоку. Побудувати UML–діаграму класів.
НО:
вот код
Код:
Код:
#include<conio.h>
#include <iostream>
#include <string> 
using namespace std;
class Sea
{
protected:
	double water;
public:
	Sea(): water(25) { cout<<"Соленость Средземного моря"<<water<<endl;}
		Sea(int w): water(w) { }
	virtual ~Sea { }
	Sea (const Sea& rhs) { }
	//friend ostream& operator<<(ostream&, Sea&);
};
class Gulf :  class Sea
{
public:
	void Print()
	{
		cout<<"Соленость в заливе: "<<water<<"%o"<<endl;

	}
	Gulf(int g): watrer(g) { }
	virtual ~Gulf { }
};
class Gulf : class Bay
{

};
int main()
{
	_getch();
	return 0;
}
Я не прошу дописать мне задачу, фишка главная объясните и покажите реализацию этой дуразкой перегрузки, сколько читаю, но не пойму... Пожалуйста)
dykee вне форума Ответить с цитированием
Старый 18.11.2014, 10:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
объясните и покажите реализацию
Смотри:
Код:
         	Sea(): water(25) { cout<<"Соленость Средземного моря"<<water<<endl;}
		Sea(int w): water(w) { }
Это значит что компилятор позволит тебе написать либо просто Sea() либо Sea(456).
В первом случае компилятор поймет что раз ты параметр в конструктор не передаешь, то выполнять нужно тело, которое описано в перегрузке без параметра, т.е. cout<<"Соленость Средземного моря"<<water<<endl; и water инициализировать числом 25.

Второй случай - ты параметр передал. Компилятор это видит, и понимает что Sea() без параметров уже не подходит, поскольку ты распорядился принять параметр, компилятор будет искать перегрузку конструктора, в котором описан прием параметра этого типа.
Соответственно выполнится Sea(int w): water(w) { }.
Поскольку ты передал в этом случае число целое, то компилятор вполне сможет его использовать. Если же ты начнешь туда пихать вещественное, компилятор подумает что ни Sea() ни Sea(int) не подойдет, и скажет тебе об этом.
Понятно? Смысл перегрузки в том что компиль предоставляет тебе выбор, как ты хочешь вызвать конструктор - так или по другому, но обязательно по правилам параметров, описанных в перегруженном методе.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.11.2014, 10:41   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Перегруженные функции различаются списком аргументом, имея одинаковое название. Например:

Код:
void print (int a) { printf("%d\n", a); }
void print (char a) { printf("%c\n", a); }
void print (int a, int b) { printf("%d %d\n", a, b); }
void print (float a, int b) { printf("%f %d\n", a, b); }
void print (float a, double b) { printf("%f %f\n", a, b); }
void print (float a, ...) { printf("%f\n", a); }
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 18.11.2014, 10:43   #4
dykee
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Смотри:
Код:
         	Sea(): water(25) { cout<<"Соленость Средземного моря"<<water<<endl;}
		Sea(int w): water(w) { }
Это значит что компилятор позволит тебе написать либо просто Sea() либо Sea(456).
В первом случае компилятор поймет что раз ты параметр в конструктор не передаешь, то выполнять нужно тело, которое описано в перегрузке без параметра, т.е. cout<<"Соленость Средземного моря"<<water<<endl; и water инициализировать числом 25.

Второй случай - ты параметр передал. Компилятор это видит, и понимает что Sea() без параметров уже не подходит, поскольку ты распорядился принять параметр, компилятор будет искать перегрузку конструктора, в котором описан прием параметра этого типа.
Соответственно выполнится Sea(int w): water(w) { }.
Поскольку ты передал в этом случае число целое, то компилятор вполне сможет его использовать. Если же ты начнешь туда пихать вещественное, компилятор подумает что ни Sea() ни Sea(int) не подойдет, и скажет тебе об этом.
Понятно? Смысл перегрузки в том что компиль предоставляет тебе выбор, как ты хочешь вызвать конструктор - так или по другому, но обязательно по правилам параметров, описанных в перегруженном методе.
Это все конечно хорошо Но можно помочь с реализацией перегрузки, именно кодом С небольшими комментариями
dykee вне форума Ответить с цитированием
Старый 18.11.2014, 11:39   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
int main()
{
   Sea *s=new Sea(); // Это без параметров
   Sea *s2=new Sea(34); //Это с параметрами
   ...
	_getch();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Thread и Queue: пересылка данных из потока в поток fshlik C# (си шарп) 5 16.02.2013 13:27
Грамотное завершение потока, если поток на паузе winhttp Общие вопросы .NET 3 11.01.2013 12:55
Поток блокирует выполнение другого потока Levsha100 Общие вопросы Delphi 5 06.04.2012 08:05
Создание потока,передача функции в поток asdasys Помощь студентам 4 25.02.2011 17:30
Конструктор, наследование, перегрузка операций Lioness Помощь студентам 18 02.06.2008 20:44