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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2009, 02:46   #1
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию Наследование

Подскажите пожалуйста как так можно сделать
Дан базовый класс А от него наследуетса 2 класса В и С, и от них наследуется D. Тоесть получается ромб.

A
/ \
B C
\ /
D

подскажите как так можно сделать, еслиб без класа а то множественным наследованием, а так я не знаю. или всетаки так наследовать можно.
Помоему както через виртуальные функции.
можете написать пожалуйста пример простой, искал но чтото все очень сложно и непонятно написано. помогите пожалуйста.
z3rg вне форума Ответить с цитированием
Старый 30.04.2009, 04:21   #2
DeFace
Пользователь
 
Аватар для DeFace
 
Регистрация: 27.09.2008
Сообщений: 60
По умолчанию

Код:
 
class A
{ };

class B : public A
{ };

class C : public A
{ };

class D : public B, public C
{ };
DeFace вне форума Ответить с цитированием
Старый 30.04.2009, 07:29   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Виртуальное наследование нужно использовать:
Код:
class A
{ };

class B : virtual public A
{ };

class C : virtual public A
{ };

class D : public B, public C
{ };
pu4koff вне форума Ответить с цитированием
Старый 30.04.2009, 11:57   #4
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

DeFace, так не будет работать.

pu4koff, спасибо.
z3rg вне форума Ответить с цитированием
Старый 30.04.2009, 13:03   #5
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

Сорри что борзею, но чета не догоняю.

Задачка.
Дан абстрагированный базовый класс А, от него наследуются класс В (с переменными в нём b и b1) и класс С (с переенной с). И от этих сразу двух классов наследуется ещё класс D. Так вот в этом классе используя переменные из классов В и С найти площадь некой фигуры.

Тока непонимаю как оформить все это дело. класс В и С фактически тока рисуются в них ниче писать не надо, я правильно понял, тоесть делаем так, но вот что в майне писать ???

Плиз помогите разобратся.


Код:
#include <iostream.h>
#include <iomanip.h>

class A
{ 
protected: 
	int bx,by,b1x,b1y,cx,cy;
	A(){}
	~A(){}

   virtual void vvodbb1(){
		
		cin>>bx;
		cin>>by;

		cin>>b1x;
		cin>>b1y;
			
		}

  virtual void vvodc(){
	cin>>cx;
	cin>>cy;
		}

};


class B : virtual public A
{ 

	public:
	B(){}
	~B(){}
	
};

class C : virtual public A
{
	C(){}
	~C(){}

};

class D : public B, public C
{ 
protected: 
	int p,p1,g;
public:
	D(){}
	~D(){}
	
	plos(){
	p=bx-b1x;
	p1=cy-b1y;
    g=p*p1;
	}

};

void main(){

//A *poly =new B;
//poly->vvodbb1();
//A *poly =new C;
//poly->vvodc();

D bb;
bb.vvodbb1();
bb.vvodc();
bb.plos();
}
z3rg вне форума Ответить с цитированием
Старый 30.04.2009, 13:57   #6
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

А зачем у тебя все переменные запиханы в класс A? Так теряется смысл наследования и разбиения на классы. Каждый класс должен содержать только ту информацию, которая используется в нем самом. Все остальное должно добавляться в классах-наследниках. Если нужно использовать данные в какой-нибудь фукнции (например, вывод на экран), заводишь в базовом классе виртуальную функцию, в остальных классах ее перегружаешь и делаешь в ней что нужно.
Pashan вне форума Ответить с цитированием
Старый 30.04.2009, 16:20   #7
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

по условию задачи так, или я непонял что от меня хотят.
z3rg вне форума Ответить с цитированием
Старый 30.04.2009, 16:36   #8
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Напиши исходное условие задачи, а то ерунда начнется.
Pashan вне форума Ответить с цитированием
Старый 30.04.2009, 16:54   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Класс A у Вас не абстрактный.
По данному описанию задания нужно что-то вроде:
Код:
class A
{
public:
  virtual ~A() {};
};

class B: virtual public A
{
public:
  int b, b1;
};

class C: virtual public A
{
public:
  int c;
};

class D: public B, public C
{
public:
  int calc()
  {
    return b + b1 + c; // тут типа расчет площади
  }
};
pu4koff вне форума Ответить с цитированием
Старый 30.04.2009, 20:43   #10
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

pu4koff, спасибо еще раз!!!!
Pashan, сорри исходного нету, это дружбан билет пометил попросил сделать а я сам бот.

Последний раз редактировалось z3rg; 30.04.2009 в 20:46.
z3rg вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
наследование методов TaTT DoGG Общие вопросы .NET 4 27.02.2009 01:27
Множественное наследование Crucian Общие вопросы Delphi 1 29.12.2008 14:26
Наследование CSS SunKnight HTML и CSS 1 23.11.2008 01:39
Наследование Кирилл13 Общие вопросы C/C++ 1 11.11.2008 14:47
Классы и наследование. Scratch Общие вопросы C/C++ 9 27.09.2008 16:03