Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Класы,структуры


Автор: Warden 30.1.2009, 14:36
Добро дня суток, сразу к делу, есть задание:
Создать клас для храненияданых про любой предмет (3 члена данных,3члена метода,конструктор,деструкто+член данных что являеться структурой)
Создать клас для хранения колекции объектов предедущего(можно использовать стаитческий масив, метод добавление елимента в колекцию,удаление и отображения всего на экране).
Вот что у меня получилось при объявлении в котором я уже запутался, может кому не труднопомогите либо ктото похожее делалsmile
Либо есть хорошые примерыsmile вобщем нужна большая помощьsmile
Код

#include <alloc.h>
#include <iostream.h>
struct Date{
unsigned int day;
unsigned int mounth;
unsigned int year;
};

class monitor{
char *brand;
char *model;
unsigned int price;
Date *buyDay;
 public:
 monitor();
 ~monitor();
 char* getBrand(){return brand;}
 char* getModel(){return model;}
 int getPrice(){return price;}
};

class shop{
monitor mas[50];
 public:
 void* addElement();
 void* delElement(int number);
 void showAll();

};
/////////////////////////////////////////////////////////////
monitor::monitor(){
brand=(char*)malloc(sizeof(char) * 15);
model=(char*)malloc(sizeof(char) * 10);
brand="none";
model="none";
price=0;
buyDay->day=0;
buyDay->mounth=0;
buyDay->year=0;
}

monitor::~monitor(){
delete brand;
delete model;
}

void*shop::addElement(){

}

////////////////////////////////////////////////////////////
void main(){
}

Автор: Dmi3ev 30.1.2009, 16:02
можно такое сделать... удаление осиль сам... erase смотри у вектора, там ничего сложного...
Код

//---------------------------------------------------------------------------
#include <iostream.h>
#include <vector>
//---------------------------------------------------------------------------
struct info
{
char* madein;//где сделан
double d;//диагональ
bool rusins;//есть ли русская инструкция
};
//---------------------------------------------------------------------------
class Monitor//Монитор
{
public:
 Monitor(){};//можно сделать покруче
 void SetParam(char* s1, char* s2, double a)// задаем значения брэнду, модели, цене
 {
  price=a;
  model=s2;
  brand=s1;
 };
 void SetInfo(char *s1, bool b, double a)//задаем значения для информации (наша структура, созданная выше)
 {
  moninfo.madein=s1;
  moninfo.d=a;
  moninfo.rusins=b;
 };
 void Show()//показываем все, кроме информации
 {
  cout<<"By "<<brand<<endl;
  cout<<"Model"<<model<<endl;
  cout<<"Price: "<<price<<endl;
 };
 void ShowInfo()//показываем инфо
 {
  cout<<"Made in: "<<moninfo.madein<<endl;
  if(moninfo.rusins)
   cout<<"Rus instruction: yes"<<endl;
  else
   cout<<"Rus instruction: no"<<endl;
  cout<<"D: "<<moninfo.d<<endl;
 };
 ~Monitor(){};//деструктор, можно покруче сделать
private:
 char* model;
 char* brand;
 double price;
 struct info moninfo;
};
//---------------------------------------------------------------------------
class Shop//Магазин мониторов
{
public:
 Shop(){};//Конструктор, можно сделать лучше
 void AddMonitor(Monitor c)//Добавить новый монитор
 {
  v.push_back(c);
 }
 void ShowAll()//Показать все, что есть
 {
  for (int i=0; i<v.size(); i++)
   {
    cout<<"------------"<<i+1<<"------------"<<endl;
    v[i].Show();
    v[i].ShowInfo();
    cout<<"--------------------------"<<endl;
   }
 }
 ~Shop(){};//Деструктор, можно сделать лучше
private:
 vector<Monitor> v;//Тут будут хранится все мониторы в магазине
} ;
//---------------------------------------------------------------------------

//Затестим
int main()
{
//Сначала работаем с классом монитор
cout<<"Work with Monitor"<<endl;

Monitor m;//объявили
m.SetParam("LG", "L1950B", 6000);//задали значения брэнду, модели, цене
m.Show();//Показали это все
m.SetInfo("China", true, 19);//Задали значения дополнительной информации
m.ShowInfo();//И ее тоже показали
//Теперь поработаем с магазином
cout<<"Work with Shop"<<endl;

Shop mys;//объявили
mys.AddMonitorA(m);//Добавили
mys.AddMonitorA(m);//Лень, поэтому добавили то же самое
mys.AddMonitorA(m);//Лень, поэтому добавили то же самое
mys.ShowAll();//Показали все, что есть в нашем небогатом магазине (3 монитора)

system("pause");
        return 0;
}
//---------------------------------------------------------------------------

Автор: Warden 30.1.2009, 16:21
спасибо огромное я болье-неменее всё до векторов, я понимаю что єто динамическая структура для хранения даных, но кто может либо есть без векторовsmile

Автор: Dmi3ev 30.1.2009, 16:33
вот тебе на 100 мониторов
Код

//---------------------------------------------------------------------------

#include <iostream.h>
#include <vector>
//---------------------------------------------------------------------------
struct info
{
char* madein;
double d;
bool rusins;
};
//---------------------------------------------------------------------------
class Monitor
{
public:
 Monitor(){};
 void SetParam(char* s1, char* s2, double a)
 {
  price=a;
  model=s2;
  brand=s1;
 };
 void SetInfo(char *s1, bool b, double a)
 {
  moninfo.madein=s1;
  moninfo.d=a;
  moninfo.rusins=b;
 };
 void Show()
 {
  cout<<"By "<<brand<<endl;
  cout<<"Model"<<model<<endl;
  cout<<"Price: "<<price<<endl;
 };
 void ShowInfo()
 {
  cout<<"Made in: "<<moninfo.madein<<endl;
  if(moninfo.rusins)
   cout<<"Rus instruction: yes"<<endl;
  else
   cout<<"Rus instruction: no"<<endl;
  cout<<"D: "<<moninfo.d<<endl;
 };
 ~Monitor(){};
private:
 char* model;
 char* brand;
 double price;
 struct info moninfo;
};
//---------------------------------------------------------------------------
class Shop
{
public:
 Shop(){k=0;};
 void AddMonitor(Monitor c)
 {
  v[k]=c;
  k++;
 }
 void ShowAll()
 {
  for (int i=0; i<k; i++)
   {
    cout<<"------------"<<i+1<<"------------"<<endl;
    v[i].Show();
    v[i].ShowInfo();
    cout<<"--------------------------"<<endl;
   }
 }
 ~Shop(){};
private:
 Monitor v[100];//наши мониторы
 int k;//счетчик
} ;
//---------------------------------------------------------------------------


int main()
{
cout<<"Work with Monitor"<<endl;

Monitor m;
m.SetParam("LG", "L1950B", 6000);
m.Show();
m.SetInfo("China", true, 19);
m.ShowInfo();

cout<<"Work with Shop"<<endl;

Shop mys;
mys.AddMonitorA(m);
mys.AddMonitorA(m);
mys.AddMonitorA(m);
mys.ShowAll();

system("pause");
        return 0;
}
//---------------------------------------------------------------------------


Добавлено через 54 секунды
суть та же...

Автор: mes 30.1.2009, 17:25
Цитата(Dmi3ev @  30.1.2009,  15:33 Найти цитируемый пост)
 void SetInfo(char *s1, bool b, double a)
 {
  moninfo.madein=s1;


Dmi3ev, а про strcpy() не забыто ?

Автор: Dmi3ev 30.1.2009, 17:30
mes, захотелось не использовать ничего... кроме cout для вывода... вот такое было настроение... а что, совсем плохо без strcpy()?

Автор: mes 30.1.2009, 18:05
Цитата(Dmi3ev @  30.1.2009,  16:30 Найти цитируемый пост)
а что, совсем плохо без strcpy()? 

не знаю совсем или не очень, но глаз режется, от того, что внутренним переменным классам присваивается указатель на чужую память.
как минимум желателен статический массив +strcpy().. легче конечно сразу std::string, но такое задание вряд ли  примут,
да и тс желательно научиться пользоваться "голыми" типами, чтоб лучше понимать как "работает" язык ...

Автор: Warden 30.1.2009, 22:52
лана не ругайтесь я повтыкаю не ругайтесьsmile, спасибо огромноеsmile, если чтото переделаю то скинуsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)