Классы В C++

203

New member
21.02.2012
2
0
#1
Посмотрите в сообщение №7 пожалуйста.

Здравствуйте. У меня тут такая проблема надо решить задачу Безымянный.jpg но я не могу понять как её решить. Тема называется Явные конструкторы и деструкторы.
Раньше я решил задачу похожую на эту Безымянный1.jpg но только тут 1 объект, а в задаче вверху их нужно 2. Подскажите как будет правильнее написать программу с уже 2 объектами.
Вот код 2 задачи с 1 объектом.
C++:
#include <iostream>
#include "conio.h"
using namespace std;

class ZNAK
{private: 	
char * fam;
char * name;
char * znak;

public: 	 
int data[3];
void setfam(char * fam1);//прототип метода setfam
void setname(char * name1);//прототип метода setname
char * getfam()const;// прототип метода getfam
char * getname()const;// прототип метода getname
void setznak(char * znak1);//прототип метода setznak
char * getznak()const;// прототип метода getznak
void setdata();//прототип метода setdata
int * getdata()const;// прототип метода getdata
}; // !!! В конце описания класса обязательно пишется;

// Определение функции-члена (метода) setfam класса avto
void ZNAK::setfam(char * fam1)
{	
fam=fam1;
} 

// Определение функции-члена (метода) getfam класса avto
char * ZNAK:: getfam()const
{	
return fam;
}
// Определение функции-члена (метода) setname класса avto

void ZNAK::setname(char * name1)
{	
name=name1;
} 
char * ZNAK:: getname()const
{	
return name;
}
//name
void ZNAK::setznak(char * znak1)
{	
znak=znak1;
} 

// Определение функции-члена (метода) getznak класса avto
char * ZNAK:: getznak()const
{	
return znak;
}
//знак
void ZNAK::setdata()
{	
cout << "день рождения[день месяц год]:";
cin>>data[0]>>data[1]>>data[2];
} 

// Определение функции-члена (метода) getznak класса avto


int main()
{	setlocale( LC_ALL,"Russian" );
ZNAK Z;	// срабатывает неявный конструктор класса ZNAK
char m[20];
char n[15];
char z[20];
cout<<"----------Ввод----------"<<endl;
cout << "Фамилия: ";
cin >> m;
Z.setfam(m);	// вызывается функция-член setfam
cout << "Имя: ";
cin >> n;
Z.setname(n);
cout<<"----------\n";cout<<"oven\ntelec\nblizneci\nrak\nlev\ndeva\nvesi\nskorpion\nstrelec\nkozerog\nvodolei\nriba"<<endl; cout<<"----------\n";
cout << "знак Зодиака: ";
cin >> z;
Z.setznak(z);
Z.setdata();

cout<<"----------Вывод----------"<<endl;
cout<<"Фамилия: "<<Z.getfam()<<endl;// вызывается функция-член getfam
cout<<"Имя: "<<Z.getname()<<endl;// вызывается функция-член getname
cout<<"знак Зодиака: "<<Z.getznak()<<endl;// вызывается функция-член getznak
cout<<"день рождения[день месяц год]: "<<Z.data[0]<<" "<<Z.data[1]<<" "<<Z.data[2]<<endl;// вызывается функция-член getdata


getch();
return 0;
}
Заранее спасибо.
 

Вложения

W

Whatka

#2
C++:
// 
int main()
{	setlocale( LC_ALL,"Russian" );
ZNAK Z1,Z2;	// срабатывает неявный конструктор класса ZNAK
char m[20];
char n[15];
char z[20];
cout<<"----------Ввод----------"<<endl;
cout << "Фамилия: ";
cin >> m;
Z1.setfam(m);	// вызывается функция-член setfam
cout << "Имя: ";
cin >> n;
Z1.setname(n);
cout<<"----------\n";cout<<"oven\ntelec\nblizneci\nrak\nlev\ndeva\nvesi\nskorpion\nstrelec\nkozerog\nvodolei\nriba"<<endl; cout<<"----------\n";
cout << "знак Зодиака: ";
cin >> z;
Z1.setznak(z);
Z1.setdata();
cout << "Фамилия: ";
cin >> m;
Z2.setfam(m);	// вызывается функция-член setfam
cout << "Имя: ";
cin >> n;
Z2.setname(n);
cout<<"----------\n";cout<<"oven\ntelec\nblizneci\nrak\nlev\ndeva\nvesi\nskorpion\nstrelec\nkozerog\nvodolei\nriba"<<endl; cout<<"----------\n";
cout << "знак Зодиака: ";
cin >> z;
Z2.setznak(z);
Z2.setdata();



cout<<"----------Вывод----------"<<endl;
cout<<"Фамилия: "<<Z1.getfam()<<endl;// вызывается функция-член getfam
cout<<"Имя: "<<Z1.getname()<<endl;// вызывается функция-член getname
cout<<"знак Зодиака: "<<Z1.getznak()<<endl;// вызывается функция-член getznak
cout<<"день рождения[день месяц год]: "<<Z1.data[0]<<" "<<Z1.data[1]<<" "<<Z1.data[2]<<endl;// вызывается функция-член getdata

cout<<"Фамилия: "<<Z2.getfam()<<endl;// вызывается функция-член getfam
cout<<"Имя: "<<Z2.getname()<<endl;// вызывается функция-член getname
cout<<"знак Зодиака: "<<Z2.getznak()<<endl;// вызывается функция-член getznak
cout<<"день рождения[день месяц год]: "<<Z2.data[0]<<" "<<Z2.data[1]<<" "<<Z2.data[2]<<endl;// вызывается функция-член getdata



getch();
return 0;
}
//
ну и судя по теме тебе ещё надо свои конструктор и деструктор написать
 

203

New member
21.02.2012
2
0
#4
Подскажите что можно написать в конструкторе, 1-вый я оставлю пустым, а во 2-ом нужно что то полезное написать. Подскажите пожалуйста.
Вот это
C++:
29.	avto::~avto()
30.	{
31.	cout<<"Object Destroy"<<endl;
32.	}
я вставил в деструктор.
 
W

Whatka

#5
вот конструктор и конструктор копирования
C++:
//  
ZNAK()
{
fam=0;
name=0;
znak=0;
data[0]=data[1]=data[2]=0;
}
ZNAK(ZNAK &A)
{
for(int i=0;i<3;i++)
data[i]=A.data[i];
fam=A.fam;
name=A.name;
znak=A.znak;
}
//
можешь сделать ещё конструктор с параметром (например сразу передавать фамилию)
 

203

New member
21.02.2012
2
0
#7
Я хочу спросить ещё 1 вопрос уже по теме Массив структур. Надо решить задачу Посмотреть вложение 5116 .
У меня есть код похожей задачи только в коде сортировка по фамилии а мне нужно по дате. Подскажите как это можно сделать заранее спасибо.
C++:
#include "iostream"
#include "time.h"
#include "conio.h"

using namespace std;

struct ZNAK
{
char family[15];
char name[15];
char znak[11];
int date[3];
};

bool chars(char* char1, char* char2, char* char3, char* char4)
{
int count = 0;
int sovpad = 0;
while (char1[count] != '\0')
{
if (char1[count] == char2[count])		
++sovpad;		
++count;
}
while (char3[count] != '\0')
{
if (char3[count] == char4[count])		
++sovpad;		
++count;
}

if (count == sovpad)
return true;

return false;
}

void Search(ZNAK *pZNAK, char* family, char* name, int n)
{
bool ok = false;
for (int i = 0; i < n; ++i)
{		
if (chars(pZNAK[i].family, family, pZNAK[i].name, name))
{
cout << "Family: " << pZNAK[i].family << endl;
cout << "name: " << pZNAK[i].name << endl;
cout << "ZNAK: " << pZNAK[i].znak << endl;
cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1]	<< ":" << pZNAK[i].date[2] << endl;
ok = true;
}
}
if (!ok)
cout << "Family ne naydena!!!!" << endl;	
}
/* сортировка по фамилии
void Sort(ZNAK *pZNAK, int n)
{
// A - 65
// z - 122
ZNAK f;
for (int i = 0; i < n - 1; ++i)
{
for (int j = i; j < n; ++j)
{
bool h = true;
int q = 0;	
while (h == true && q < 16)
{
if (pZNAK[j].family[q] < pZNAK[i].family[q])
{
h=false;
f = pZNAK[i];
pZNAK[i] = pZNAK[j];
pZNAK[j] = f;				
}
else if (pZNAK[j].family[q] > pZNAK[i].family[q])
h = false;			

++q;
}
}
}
}
*/
int main()
{
int n;
ZNAK pZNAK[10];
cout << "Vvedite N (n <= 10): ";
cin >> n;
if (n > 10)
{
cout << "Error: N" << endl;	
return 0;
}
for (int i = 0; i < n; ++i)
{				
cout << "Number " << i << endl;
cout << "Vvedite Family -> ";
cin >> pZNAK[i].family;
cout << "Vvedite name -> ";
cin >> pZNAK[i].name;
cout << "Vvedite Znak -> ";
cin >> pZNAK[i].znak;
cout << "Vvedite date[format: den', mesyac, god] -> ";
cin >> pZNAK[i].date[0] >> pZNAK[i].date[1] >> pZNAK[i].date[2];
}
char family[15];
char name[15]; 
cout << "Vvedite family dly poiska: ";
cin >> family;
cout << "<<<<<SEARCH RESULT>>>>>" << endl;
Search(&pZNAK[0], &family[0], &name[0], n);
Sort(&pZNAK[0], n);
cout << "<<<<<SORT RESULT>>>>>" << endl;
for (int i = 0; i < n; ++i)
{
cout << "Family: " << pZNAK[i].family << endl;
cout << "ZNAK: " << pZNAK[i].znak << endl;
cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1]	<< ":" << pZNAK[i].date[2] << endl;	
cout << "________________________________________________" << endl;
}	
getch();
return 0;
}
 

203

New member
21.02.2012
2
0
#8
Эта сортировка неправильная
C++:
/* сортировка по фамилии
void Sort(ZNAK *pZNAK, int n)
{
// A - 65
// z - 122
ZNAK f;
for (int i = 0; i < n - 1; ++i)
{
for (int j = i; j < n; ++j)
{
bool h = true;
int q = 0;	
while (h == true && q < 16)
{
if (pZNAK[j].family[q] < pZNAK[i].family[q])
{
h=false;
f = pZNAK[i];
pZNAK[i] = pZNAK[j];
pZNAK[j] = f;				
}
else if (pZNAK[j].family[q] > pZNAK[i].family[q])
h = false;			

++q;
}
}
}
}
*/
 
W

Whatka

#9
тебе нужно 3 функции:

1.любаю сортировка(вместо обычного массива - передаёшь массив стуктур)
2.сравнение 2 структур (по дате: сначала по годам,если = по месяцам,если = по дням)
3.обмен 2 структур местами(в массиве структур)
 

203

New member
21.02.2012
2
0
#10
Оказывается в программе не работает ещё и поиск пишет всегда таких нет, в чём ошибка? И сортировка почему то у меня не сортирует хотя программа компилируется.
 

203

New member
21.02.2012
2
0
#12
Можете пожалуйста ещё 1 код глянуть, вот условие 10052012419.jpg я написал код но если честно написал ерунду вот посмотрите пожалуйста заранее спасибо.
C++:
#include "iostream"
#include "conio.h"
using namespace std;

class Ghislo{
public:
Ghislo(int x, int y): a(x), b(y){cin>>a; cin>>b;}
~Ghislo();
void SetA(int x){x=a;}
void SetB(int y){y=b;}
void SetA(){--a;}
void SetB(){--b;}
void out(){cout<<a<<"+"<<b<<"i"<<endl;}
private:
int a;
int b;};

Ghislo::~Ghislo()
{cout<<"Object Destroyed"<<endl;}
int main()
{  Ghislo G(0,0);
G.SetA();
G.SetB();
G.out();
G.~Ghislo();
getch();
return 0;
}
 

Вложения