argon bulletin board

Експертно търсене  

Новини:

Автор Тема: Masiv ot obekti?  (Прочетена 2791 пъти)

1235789

  • Неактивен Неактивен
  • Публикации: 3
Masiv ot obekti?
« -: 20.11.2006, 21:22:29 »

Въпросът ми е за масив от обекти. Не ми е ясно как ще се инициализира масива "array", ако "b" и "c", бяха наследени от друг клас? Как да променя (array).init(x,y,z) ? Ще съм благодарна, ако някой ми каже.  :bow:            

class tri             //c++
 { private:
     int a, b, c;
   public:
     void init(int i, int j, int k)     
   { a=i; b=j; c=k;}
   //....
  };
 void main()
 { tri *array;           
   array=new tri[3];
   int x,y,z,i=0;
   while(...)
  { (array[i]).init(x,y,z);  i++; }//....
 }
« Последна редакция: 20.11.2006, 21:24:13 от 1235789 »
Активен

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: Masiv ot obekti?
« Отговор #1 -: 20.11.2006, 23:19:56 »

Принципно този init можеш да го направиш с конструктор. Има и начин при наследяване на класове, всеки от които има свой конструктор, да се подадат параметри на коструктора на декларирания обект от някой вторичен клас и те да се разпределят по конструктурите на класовете по дървото нагоре.
Активен
Too short signature limits.

Stilgar

  • Неактивен Неактивен
  • Публикации: 843
Re: Masiv ot obekti?
« Отговор #2 -: 21.11.2006, 02:01:45 »

vuprosa ti ne mi e mnogo iasen
edinstvenite b i c deto vijdam sa edni intove private za klasa, no purvo v C++ int ne e klas toest "ако "b" и "c", бяха наследени от друг клас" e bezsmisleno ot gledna tochka na C++. tova koeto predpolagam che imash predvid e kakvo shteshe da stane ako biaha obekti ot niakakuv klas a ne prosti int-ove
v takuv sluchai prosto triabva da si napishesh imeto na klasa pri deklaraciata na b i c i da promenish tipa na parametrite na init metoda na sushtia tozi klas

posle v cikula shte triabva da si suzdavash novi obekti ot vuprosnia klas za da gi podavash kato parametri na init metoda
v sluchaia dokolkoto razbiram masiva niama absolutno nishto obshto s problema

dano da sum razbral pravilno de
Активен
"Човек винаги трябва да си прави background" - Lia

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: Masiv ot obekti?
« Отговор #3 -: 21.11.2006, 08:27:41 »

vuprosa ti ne mi e mnogo iasen
edinstvenite b i c deto vijdam sa edni intove private za klasa, no purvo v C++ int ne e klas toest "ако "b" и "c", бяха наследени от друг клас" e bezsmisleno ot gledna tochka na C++. tova koeto predpolagam che imash predvid e kakvo shteshe da stane ako biaha obekti ot niakakuv klas a ne prosti int-ove

Амм не .. май се пита как ще стане инициализацията, ако имаме произволни примерно три класа, в които са разпределени 'a', 'b' и 'c' и да се получи ерархия от вида: класът с 'а' е наследен от класът с 'b' и след това класът с 'b' е наследен от класът с 'c'. Така ще имаме трите променливи в последния клас, като 2 от тях са получини от по-горен клас в дървото на наследяването. Май за такова нещо става въпрос или поне аз така го изтълкувах. :)

(Защо ли тълкуваме, а не дойде авторката да обясни за какво става дума? :P)
Активен
Too short signature limits.

1235789

  • Неактивен Неактивен
  • Публикации: 3
Re: Masiv ot obekti?
« Отговор #4 -: 21.11.2006, 09:54:02 »

cipher, разбрал си ме перфектно. :bow:
Ето това исках да стане:
#include<iostream.h>
#include<stdlib.h>
class dve
 { protected: int b,c;
   public:  dve(){b=c=0;};
       dve(int n ,int p){b=n;c=p;};
            ~dve(){};
 };       
class tri : public dve           
 { private: int a;
   public:  tri(int k, int l, int m):dve(l,m){a=k;};
       tri():dve(){a=0;};
            void init(int,int,int);
       ~tri(){};
       void out()const{cout<<"Размер:"<<a<<","<<b<<","<<c<<"\n"; }
 };
 void tri::init(int q,int r,int s)
 {a=q;b=r;c=s;}

 void main()
 { tri *array;           
   array=new tri[3];
   if(!array) exit(1);
   int x,y,z,i=0;
   while(i<3)
  { cout<<"x="; cin>>x;
    cout<<"y="; cin>>y;
    cout<<"z="; cin>>z;
    (array[i]).init(x,y,z);
    (array[i]).out();
    i++;
  }
  delete []array;
}
[\code]
« Последна редакция: 21.11.2006, 10:52:33 от 1235789 »
Активен

Емил Дойчев

  • Неактивен Неактивен
  • Публикации: 278
Re: Masiv ot obekti?
« Отговор #5 -: 21.11.2006, 10:44:47 »

Странно ми звучи да ти дава грешка там където казваш. Мисля, че би трябвало още при компилация да ти изреве, че нямаш default конструктор на реда:

   array=new tri[3];

Защо не дадеш целия код? Възможно е проблемът да не е там където очакваш.

Конструкторите ти изглеждат правилни, но те не могат да се използват когато се създават масиви от обекти.
Активен

Stilgar

  • Неактивен Неактивен
  • Публикации: 843
Re: Masiv ot obekti?
« Отговор #6 -: 21.11.2006, 12:10:07 »

tia veche ima v dulgia kod a v kusia ima ... vse pak:)

i dori s toia kod deto mi stana znachitelno po-iasno kakvo pitash pak ne razbrah kakvo obshto ima masiva v sluchaia
dali e edna promenliva ili masiv za konkretnia vupros e vse taia, tui kato vsichko taka i taka e koda na klasovete i niama nikakva razlika dali se izpulniava vurhu edin obekt ili mnojestvo takiva
Активен
"Човек винаги трябва да си прави background" - Lia

Емил Дойчев

  • Неактивен Неактивен
  • Публикации: 278
Re: Masiv ot obekti?
« Отговор #7 -: 21.11.2006, 13:44:29 »

1235789 не е гот така да си редактираш поста. Излиза, че коментара ми е пълна глупост.
Активен

VooDooMaN

  • Гост
Re: Masiv ot obekti?
« Отговор #8 -: 21.11.2006, 15:09:49 »

Един съвет от мен. Пиши качествен код. Научиш ли се на бози, после е неспасяемо.
Активен

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: Masiv ot obekti?
« Отговор #9 -: 21.11.2006, 15:14:59 »

За какъв качествен код пък мрънкаш ти. Момичето има проблем с някаква задача най-вероятно. Ти докато си писал "Hello, World" сигурно си бълвал качествен код, но ние простосмъртните си го пишем по стандартния тромав начин.
Активен
Too short signature limits.

VooDooMaN

  • Гост
Re: Masiv ot obekti?
« Отговор #10 -: 21.11.2006, 15:18:07 »

Една от причините от университетие да не излизат професионалисти е точно тази - незнание за или подценяване на подобни проблеми. Не съм писал качествен код, защото е нямало кой да ми каже. Естествено, всеки да се чувства свободен да пренебрегва доброжелателни съвети.
Активен

Ivelinka

  • Неактивен Неактивен
  • Публикации: 430
    • My YouTube
Re: Masiv ot obekti?
« Отговор #11 -: 21.11.2006, 16:39:59 »

Мани мани... мен питаш ли ме като пиша код дето почти не се разбира от друг.. сега се уча да стандартизирам кода, за да го чете лесно всеки...  :roll:

Найден последния път ме направи на нищо  :cry:
Активен
There is always something waiting at the end of the road... if you are not willing to see it, you probably shouldn't be there

Sayos

  • Неактивен Неактивен
  • Публикации: 1366
  • The Dark side
Re: Masiv ot obekti?
« Отговор #12 -: 21.11.2006, 16:44:35 »

Ivelinka, не слушай Найден опитва се да те да ти краде кода, сега не го разбира за това се радвай  :haha:
Активен

Stilgar

  • Неактивен Неактивен
  • Публикации: 843
Re: Masiv ot obekti?
« Отговор #13 -: 21.11.2006, 16:57:07 »

Мани мани... мен питаш ли ме като пиша код дето почти не се разбира от друг.. сега се уча да стандартизирам кода, за да го чете лесно всеки...  :roll:

Найден последния път ме направи на нищо  :cry:

dobre izvesten fakt e che ne samo drug ne ti go razbira mi i sama ne si go razbirash
ti si istinski obfuscator

inache voodooman e napulno prav za kachestvenia kod kvo tolko ima da si slagash skobite po pravilnia indent style shtoto kato e 20 reda programa OK ama kato porasne niama opraviane, a da ne govorim che se svikva na losho
Активен
"Човек винаги трябва да си прави background" - Lia

Ivelinka

  • Неактивен Неактивен
  • Публикации: 430
    • My YouTube
Re: Masiv ot obekti?
« Отговор #14 -: 21.11.2006, 17:03:14 »

еее... не разбирам си го.. само дето трябва да се настроя  :hihi: веднага не можеш да го схванеш! трябва да вникнеш в логиката ми... ахахах  :-D бтв не е смешно трагично е!!
Активен
There is always something waiting at the end of the road... if you are not willing to see it, you probably shouldn't be there

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: Masiv ot obekti?
« Отговор #15 -: 21.11.2006, 17:23:02 »

Мани мани... мен питаш ли ме като пиша код дето почти не се разбира от друг.. сега се уча да стандартизирам кода, за да го чете лесно всеки...  :roll:

Найден последния път ме направи на нищо  :cry:

dobre izvesten fakt e che ne samo drug ne ti go razbira mi i sama ne si go razbirash
ti si istinski obfuscator

inache voodooman e napulno prav za kachestvenia kod kvo tolko ima da si slagash skobite po pravilnia indent style shtoto kato e 20 reda programa OK ama kato porasne niama opraviane, a da ne govorim che se svikva na losho
С текстов редактор, който включва достатъчно функции, може да си наредиш кода автоматично по избран от теб стандарт. Например ANSI C++ или UNIX Style или пък JAVA, ако ти е по-удобно.
Активен
Too short signature limits.

Stilgar

  • Неактивен Неактивен
  • Публикации: 843
Re: Masiv ot obekti?
« Отговор #16 -: 21.11.2006, 19:22:46 »

dobre che ni informira:)

samo edno shte kaja
leji ti na taia kulka:)

+ tova stila ne e samo indent
Активен
"Човек винаги трябва да си прави background" - Lia

1235789

  • Неактивен Неактивен
  • Публикации: 3
Re: Ni6to ob6to s Masiv ot obekti?
« Отговор #17 -: 21.11.2006, 19:56:29 »

За Емил : Извини ме, няма да правя повече така.
За всички: Ами ако искате някой да ми редактира кода,
така  че да разбера каква е разликата. Ще съм благодарна.  :blush:
Активен

Stilgar

  • Неактивен Неактивен
  • Публикации: 843
Re: Masiv ot obekti?
« Отговор #18 -: 21.11.2006, 23:15:20 »


#include "stdafx.h"
#include <iostream>
using namespace std;


class dve
{
protected:

int b,c;

public:

dve(){b=c=0;};

dve(int n ,int p)
{
b=n;
c=p;
};

~dve(){};
};

class tri : public dve           
{
private:

int a;

public:

tri(int k, int l, int m):dve(l,m)
{
a=k;
};

tri():dve()
{
a=0;
};

void init(int,int,int);

~tri(){};

void out()const
{
cout<< "Размер:" << a << "," << b << "," << c << "\n";
}
};

void tri::init(int q,int r,int s)
{
a=q;
b=r;
c=s;
}

void main()
{
tri *array;           
array=new tri[3];
if(!array) exit(1);
int x,y,z,i=0;

while(i<3)
{
cout<<"x="; cin>>x;
cout<<"y="; cin>>y;
cout<<"z="; cin>>z;
(array[i]).init(x,y,z);
(array[i]).out();
i++;
}

delete []array;
}

naprimer

vupreki che tabulaciite vuv foruma ochevidno sa dosta po-seriozni otkolkoto v IDE-tata:)
Активен
"Човек винаги трябва да си прави background" - Lia