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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2010, 20:39   #1
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию Наследование

Здравствуйте. Почему не наследуется метод get_U()?
Код:
#include<iostream.h>
#include<conio.h>

class el_pribor
{
protected:
	int U,Y;
public:
	el_pribor(int U = 220, int Y = 16) {this->U = U; this->Y = Y;}
	int get_U() const {return U;}
	int get_Y() const {return Y;}
};

class vilka: private el_pribor
{
	int zemlia;
public:
	vilka(int zem = 1) : zemlia(zem) {}
	vilka(int zem, int voltage, int amperage) : el_pribor(voltage,amperage) {zemlia = zem;}
	char * get_zemlia() const
	{
		if (zemlia) return "s zazemleniem";
		else return "bez zazemleniia";
	}
};

void main()
{
	clrscr();
	el_pribor a(110,15);
	cout<<a.get_U()<<" "<<a.get_Y()<<endl;
	vilka b;
	vilka c(0);
	vilka d(1,100,5);
	cout<<b.get_zemlia()<<" ";
	cout<<b.get_U();
}
Сергей089 вне форума Ответить с цитированием
Старый 06.02.2010, 21:10   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Сергей089 Посмотреть сообщение
Здравствуйте. Почему не наследуется метод get_U()?
Код:
class vilka: private el_pribor
{
Он наследуется, но только для использования классом vilka. Чтобы он был доступен остальным частям программы, стоит делать public наследование
Код:
class vilka : public el_pribor
{ ...
netrino вне форума Ответить с цитированием
Старый 06.02.2010, 21:19   #3
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

Спасибо, теперь работает. Только пока не понятно почему так?

А какая разница между private, protected и public наследованием?

Последний раз редактировалось Stilet; 08.02.2010 в 09:47.
Сергей089 вне форума Ответить с цитированием
Старый 06.02.2010, 22:05   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

такая же как между private, protected и public членами класса.
private - можно использовать только внутри класса
protected - внутри и в наследниках класса
public - внутри, в наследниках и за пределами класса( то есть везде )
netrino вне форума Ответить с цитированием
Старый 06.02.2010, 22:18   #5
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

Т.е. если бы я написал функцию get_U() в protected, то программа бы работала?
Сергей089 вне форума Ответить с цитированием
Старый 06.02.2010, 22:27   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Сергей089 Посмотреть сообщение
Т.е. если бы я написал функцию get_U() в protected, то программа бы работала?
При чём тут get_U?
Речь ведь о другом - о типе наследования. У вас оно было private, что запрещает доступ к базовому классу через этот производный класс.
Остальные комбинации можете проверить на практике сами и/или почитать о них в книгах по Си++
netrino вне форума Ответить с цитированием
Старый 07.02.2010, 12:04   #7
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

Спасибо. Понял проверкой всех комбинаций.
Сергей089 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование на C++ dziga1989 Помощь студентам 5 22.10.2009 11:25
Наследование alex_triton Общие вопросы C/C++ 0 19.10.2009 20:25
Наследование beregok Общие вопросы C/C++ 1 04.07.2009 22:39
Наследование z3rg Общие вопросы C/C++ 9 30.04.2009 20:43
Наследование Кирилл13 Общие вопросы C/C++ 1 11.11.2008 14:47