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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2011, 00:03   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Множественное наследование

Програмка несложная, есть 2 вопроса

Код:
#include "stdafx.h"
#include "iostream"
#include "locale.h"
using namespace std;
class mlec{
public:
	mlec(int g,int h,int b){
		hvost=g;
		ushi=h;
		telo=b;
	}

private:
	int hvost, ushi, telo;
};
class presm{
public:
	presm(int p,int y){
		lapi=p;
		zubi=y;
	}
private:
	int lapi, zubi;
};

class utkonos:public mlec, public presm{
public:
	utkonos(int g,int gg,int ggg,int gggg, int ggggg):mlec(g,gg,ggg),presm(gggg,ggggg){}
	void enter(){
		int g,gg,ggg,gggg,ggggg;
		cout<<"Введите размер хвоста: " <<endl;
		cin>>g;
		cout<<"Введите размер ушей: " <<endl;
		cin>>gg;
		cout<<"Введите размер тела: " <<endl;
		cin>>ggg;
		cout<<"Введите размер лап: " <<endl;
		cin>>gggg;
		cout<<"Введите размер зубов: " <<endl;
		cin>>ggggg;
		mlec(g,gg,ggg);
		presm(gggg,ggggg);
		cout<<"Утконос успешно создан !!: " <<endl<<endl;
	}
	void out(){
		cout <<"Размер хвоста "<<hvost<<", размер ушей "<<ushi<<", размер тела "<<telo<<", размер лап "<<lapi<<", размер зубов "<<zubi<<endl;
	}
};

int main()
{
	setlocale(LC_ALL,"russian");
    utkonos h;
	h.enter();
	h.out();
	system("pause");
    return 0;
}
Код:
1>------ Build started: Project: laba5, Configuration: Debug Win32 ------
1>  laba5.cpp
1>laba5.cpp(48): error C2248: 'mlec::hvost' : cannot access private member declared in class 'mlec'
1>          laba5.cpp(16) : see declaration of 'mlec::hvost'
1>          laba5.cpp(7) : see declaration of 'mlec'
1>laba5.cpp(48): error C2248: 'mlec::ushi' : cannot access private member declared in class 'mlec'
1>          laba5.cpp(16) : see declaration of 'mlec::ushi'
1>          laba5.cpp(7) : see declaration of 'mlec'
1>laba5.cpp(48): error C2248: 'mlec::telo' : cannot access private member declared in class 'mlec'
1>          laba5.cpp(16) : see declaration of 'mlec::telo'
1>          laba5.cpp(7) : see declaration of 'mlec'
1>laba5.cpp(48): error C2248: 'presm::lapi' : cannot access private member declared in class 'presm'
1>          laba5.cpp(25) : see declaration of 'presm::lapi'
1>          laba5.cpp(18) : see declaration of 'presm'
1>laba5.cpp(48): error C2248: 'presm::zubi' : cannot access private member declared in class 'presm'
1>          laba5.cpp(25) : see declaration of 'presm::zubi'
1>          laba5.cpp(18) : see declaration of 'presm'
1>laba5.cpp(55): error C2512: 'utkonos' : no appropriate default constructor available
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Компилятор ругается что объекты дочернего класса не могут получить доступ к данным базового .. но если он их наследует, то он их и содержит, и пытается обратиться к совим унаследованным данным .. в чем же проблема ?
И еще компилятор ругается что у класса утконос нет дефолтного конструктора .. а зачем он ему нужен если я его не вызываю ?
Я его объявляю при этом не инициализируя
Jugger вне форума Ответить с цитированием
Старый 09.12.2011, 01:43   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> в чем же проблема ?

private для того и создано, чтобы спрятать от всех, даже от наследников. Хотите, чтобы наследники видели поля, поместите их в protected, а лучше добавьте методы доступа.

> при этом не инициализируя

Код:
utkonos h;
это и есть создание объекта типа utkonos с вызовом дефолтного конструктора.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.12.2011, 20:23   #3
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Понятно .. но кое что не понятно
Наследники не могут обратиться к приватным данным базы, да .. но они ведь её наследуют, и если я пишу например
Код:
class a{
..
private:
int g;
};
class b:public a{
..
private:
int x;
};
то класс b будет содержать два инта ? один свой, один унаследованный .. как же обращаться к унаследованному если не g ?
Jugger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множественное наследование в C# Mixim C# (си шарп) 15 14.03.2012 19:43
Множественное наследование С++ добрый_фей Помощь студентам 1 13.06.2011 14:31
Множественное наследование liza kalueva Общие вопросы C/C++ 2 10.03.2010 01:57
Конкурс на изощренность. Множественное наследование Парсифаль Общие вопросы C/C++ 4 09.02.2010 21:21
Множественное наследование Crucian Общие вопросы Delphi 1 29.12.2008 14:26