argon bulletin board
Факултети => Факултет по математика и информатика => Темата е започната от: 1235789 в 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++; }//....
}
-
Принципно този init можеш да го направиш с конструктор. Има и начин при наследяване на класове, всеки от които има свой конструктор, да се подадат параметри на коструктора на декларирания обект от някой вторичен клас и те да се разпределят по конструктурите на класовете по дървото нагоре.
-
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
-
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)
-
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]
-
Странно ми звучи да ти дава грешка там където казваш. Мисля, че би трябвало още при компилация да ти изреве, че нямаш default конструктор на реда:
array=new tri[3];
Защо не дадеш целия код? Възможно е проблемът да не е там където очакваш.
Конструкторите ти изглеждат правилни, но те не могат да се използват когато се създават масиви от обекти.
-
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
-
1235789 не е гот така да си редактираш поста. Излиза, че коментара ми е пълна глупост.
-
Един съвет от мен. Пиши качествен код. Научиш ли се на бози, после е неспасяемо.
-
За какъв качествен код пък мрънкаш ти. Момичето има проблем с някаква задача най-вероятно. Ти докато си писал "Hello, World" сигурно си бълвал качествен код, но ние простосмъртните си го пишем по стандартния тромав начин.
-
Една от причините от университетие да не излизат професионалисти е точно тази - незнание за или подценяване на подобни проблеми. Не съм писал качествен код, защото е нямало кой да ми каже. Естествено, всеки да се чувства свободен да пренебрегва доброжелателни съвети.
-
Мани мани... мен питаш ли ме като пиша код дето почти не се разбира от друг.. сега се уча да стандартизирам кода, за да го чете лесно всеки... :roll:
Найден последния път ме направи на нищо :cry:
-
Ivelinka, не слушай Найден опитва се да те да ти краде кода, сега не го разбира за това се радвай :haha:
-
Мани мани... мен питаш ли ме като пиша код дето почти не се разбира от друг.. сега се уча да стандартизирам кода, за да го чете лесно всеки... :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
-
еее... не разбирам си го.. само дето трябва да се настроя :hihi: веднага не можеш да го схванеш! трябва да вникнеш в логиката ми... ахахах :-D бтв не е смешно трагично е!!
-
Мани мани... мен питаш ли ме като пиша код дето почти не се разбира от друг.. сега се уча да стандартизирам кода, за да го чете лесно всеки... :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, ако ти е по-удобно.
-
dobre che ni informira:)
samo edno shte kaja
leji ti na taia kulka:)
+ tova stila ne e samo indent
-
За Емил : Извини ме, няма да правя повече така.
За всички: Ами ако искате някой да ми редактира кода,
така че да разбера каква е разликата. Ще съм благодарна. :blush:
-
#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:)