#include <iostream>
#include <string.h>
using namespace std;
class CRekord{
char* m_pNazwa;
const int m_nrID = licznik;
static int licznik;
short int m_pKod[20];
public:
CRekord(char* naz);
~CRekord();
CRekord(const CRekord& wzorzec);
CRekord operator= (const CRekord& prawy){
if(this != (&prawy)){
this->~CRekord();
m_pNazwa = prawy.m_pNazwa;
for(int i=0; i<20 ; i++){
m_pKod[i] = prawy.m_pKod[i];
}
}
}
void ustaw();
friend istream& operator>>(istream &we, CRekord &prawa);
void wypisz();
};
int CRekord::licznik = 0;
CRekord::CRekord(char* naz){
licznik++;
m_pNazwa = new char[50];
strncpy(m_pNazwa,naz,50);
for(int i=0; i<20 ; i++){
m_pKod[i]=0;
}
}
CRekord::~CRekord(){
delete [] m_pNazwa;
}
CRekord::CRekord(const CRekord& wzorzec){
licznik++;
m_pNazwa = wzorzec.m_pNazwa;
for(int i=0; i<20 ; i++){
m_pKod[i] = wzorzec.m_pKod[i];
}
}
void CRekord::wypisz(){
cout<<m_pNazwa<<endl<<m_nrID<<endl<<licznik<<endl<<m_pKod[0]<<endl;
}
void CRekord::ustaw(){
short int temp[20];
cout<<"Podaj stary kod"<<endl;
for (int i=0; i<20 ; i++) {
cin>>temp[i];
if(m_pKod[i]!=temp[i]) return;
}
cout<<"Podaj nowy kod"<<endl;
for(int i=0; i<20 ; i++){
cin>>m_pKod[i];
}
}
istream& operator>>(istream &we, CRekord &prawa){
if (&cin == &we){
cout<<"Podaj nazwe"<<endl;
char temp[50];
cin>>temp;
strncpy(prawa.m_pNazwa,temp,50);
cout<<"Podaj kod"<<endl;
for (int i=0; i<20 ; i++){
cin>>prawa.m_pKod[i];
}
}
return we;
}
int main(){
CRekord a("napis");
a.wypisz();
CRekord b(a);
b.wypisz();
cin>>b;
return 0;
}
Może mi ktoś wytłumaczyć te warunek?
friend istream& operator>>(istream& we, CRekord& wzor)
{
if (&cin == &we)
{
Co to jest &cin? Adres strumenia czy coś :D?
kmph&cin
to jest adres strumienia. To g**wno sprawdza, czy strumień, który podajesz jako argument (we
), to jest tożsamościowo strumieńcin
, porównując ich adresy w pamięci.kmphif (&cin == &we)
istream
to nie jest abstrakcyjny strumień. Dla przykładu obiektcin
jest jego instancją.kmphistream
to jest jakiś strumień wejścia, z założenia funkcja, która przyjmuje obiekt klasyistream
nie wie, co to konkretnie za strumień (a więc, jest bariera abstrakcji).cin
to jest ten konkretny strumień. Wiem, żeistream
to nie jest, w ścisłym sensie, klasa abstrakcyjna.