Ĺadny brzuch
Każdy kto "męczył" kedyś klasy i wzorce w C++ bawił się zapewnie kodem w takim stylu:
#include <stdio.h> #include <iostream> using namespace std; const int DefaultSize=5; class X { public: X():itsParam(0) {} X(int param):itsParam(param) {} ~X() {} int GetParam() const { return itsParam; } void SetParam(int param) { itsParam=param; } private: int itsParam; }; template<class T> class Array { public: Array(int size=DefaultSize); Array(const Array &rhs); ~Array() { delete[] pType; } Array& operator=(const Array&); T& operator[](int offset) { return pType[offset]; } const T& operator[](int offset) const { return pType[offset]; } int GetSize() const { return itsSize; } friend ostream& operator<<(ostream&, Array<T>&); private: T* pType; int itsSize; }; template<class T> Array<T>::Array(int size):itsSize(size) { pType=new T[itsSize]; for(int j=0; j<itsSize; pType[j++]=0); } template<class T> Array<T>::Array(const Array& rhs) { itsSize=rhs.GetSize(); pType=new T[itsSize]; for(int j=0; j<itsSize; j++) pType[j]=rhs[j]; } template<class T> Array<T>& Array<T>::operator=(const Array& rhs) { if(this==&rhs) // bo w tym przypadku przypisanie return *this; // do samego siebie miałoby opłakane skutki;) delete[] pType; itsSize=rhs.GetSize(); pType=new T[itsSize]; for(int j=0; j<itsSize; j++) pType[j]=rhs[j]; return *this; } template<class T> ostream& operator<<(ostream& stream, Array<T>& array) { for(int j=0; j<array.GetSize(); j++) stream<<"["<<j<<"]"<<array[j]< <endl; return stream; } int main() { // sprawdzmy czy na pewno X dziala... X something(4); cout<<something.GetParam()<<endl; // sprawdzamy czy Array dziala... X* pX=0; Array<X> somethingBig; for(int j=0; j<somethingBig.GetSize(); j++) { pX=new X; pX->SetParam(j); somethingBig[j]=*pX; delete pX; } cout<<somethingBig; system("pause"); return 0; }
Niestey mój BCB 5 nie chce zbudować tego programiku - jakiś błąd linkera. Hmmm... Błąd linkera (kompilator milczał)? Może jakaś mała niezgodność ze standardem ANSI C++. Przecież to dosyć stara wersja... Z nowszego stuffu miałem tylko linuxowego gcc/g++, więc nie czekałem ani chwili i... znowu błąd :/ Wniosek: gdzieś się pomyliłem. Ale gdzie???? IMHO wszystko jest OK...
... jakiś błąd linkera ...
Na podstwaie czegos takiego to ja moge ci powiedziec, ze masz jakis blad <_<
Na podstwaie czegos takiego to ja moge ci powiedziec, ze masz jakis blad <_<
Istotnie książka "C++ dla każdego" utwierdzała mnie w przekonaniu, że wszystko jest ok. Niestety nie było. To duży minus dla tej pozycji
No nie wiem. Przeczytałem książkę i wiem, że autor najbardziej stawia na zgodność ze standardem ANSI.
Offtopic mały...
Widzę w waszym języku błędne tłumaczenia prosto od kochanego wydawnictwa NT. Błagam, trzymajmy się poprawnego słownictwa:
template - szablon
pattern - wzór, wzorzec
Więc klasy nie są wzorcowe, a szablonowe. A design patterns to nie są szablony, a wzorce projektowe. WNT ma jakichś dziwnych tłumaczy...
Pozdrawiam,
TeMPOraL.
tak, ale w jezyku polskim bardzo czesto uzywa sie slow "szablon" i "wzorzec" zamiennie :)
tak, ale w jezyku polskim bardzo czesto uzywa sie slow "szablon" i "wzorzec" zamiennie :)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include <stdio.h> #include <iostream> using namespace std; const int DefaultSize=5; class X { public: X():itsParam(0) {} X(int param):itsParam(param) {} ~X() {} int GetParam() const { return itsParam; } void SetParam(int param) { itsParam=param; } private: int itsParam; }; template<class T> class Array { public: Array(int size=DefaultSize); Array(const Array &rhs); ~Array() { delete[] pType; } Array& operator=(const Array&); T& operator[](int offset) { return pType[offset]; } const T& operator[](int offset) const { return pType[offset]; } int GetSize() const { return itsSize; } friend ostream& operator<<(ostream&, Array<T>&); private: T* pType; int itsSize; }; template<class T> Array<T>::Array(int size):itsSize(size) { pType=new T[itsSize]; for(int j=0; j<itsSize; pType[j++]=0); } template<class T> Array<T>::Array(const Array& rhs) { itsSize=rhs.GetSize(); pType=new T[itsSize]; for(int j=0; j<itsSize; j++) pType[j]=rhs[j]; } template<class T> Array<T>& Array<T>::operator=(const Array& rhs) { if(this==&rhs) // bo w tym przypadku przypisanie return *this; // do samego siebie miałoby opłakane skutki;) delete[] pType; itsSize=rhs.GetSize(); pType=new T[itsSize]; for(int j=0; j<itsSize; j++) pType[j]=rhs[j]; return *this; } template<class T> ostream& operator<<(ostream& stream, Array<T>& array) { for(int j=0; j<array.GetSize(); j++) stream<<"["<<j<<"]"<<array[j]< <endl; return stream; } int main() { // sprawdzmy czy na pewno X dziala... X something(4); cout<<something.GetParam()<<endl; // sprawdzamy czy Array dziala... X* pX=0; Array<X> somethingBig; for(int j=0; j<somethingBig.GetSize(); j++) { pX=new X; pX->SetParam(j); somethingBig[j]=*pX; delete pX; } cout<<somethingBig; system("pause"); return 0; }
Niestey mój BCB 5 nie chce zbudować tego programiku - jakiś błąd linkera. Hmmm... Błąd linkera (kompilator milczał)? Może jakaś mała niezgodność ze standardem ANSI C++. Przecież to dosyć stara wersja... Z nowszego stuffu miałem tylko linuxowego gcc/g++, więc nie czekałem ani chwili i... znowu błąd :/ Wniosek: gdzieś się pomyliłem. Ale gdzie???? IMHO wszystko jest OK...
... jakiś błąd linkera ...
Na podstwaie czegos takiego to ja moge ci powiedziec, ze masz jakis blad <_<
Na podstwaie czegos takiego to ja moge ci powiedziec, ze masz jakis blad <_<


Istotnie książka "C++ dla każdego" utwierdzała mnie w przekonaniu, że wszystko jest ok. Niestety nie było. To duży minus dla tej pozycji
No nie wiem. Przeczytałem książkę i wiem, że autor najbardziej stawia na zgodność ze standardem ANSI.
Offtopic mały...
Widzę w waszym języku błędne tłumaczenia prosto od kochanego wydawnictwa NT. Błagam, trzymajmy się poprawnego słownictwa:
template - szablon
pattern - wzór, wzorzec
Więc klasy nie są wzorcowe, a szablonowe. A design patterns to nie są szablony, a wzorce projektowe. WNT ma jakichś dziwnych tłumaczy...
Pozdrawiam,
TeMPOraL.
tak, ale w jezyku polskim bardzo czesto uzywa sie slow "szablon" i "wzorzec" zamiennie :)
tak, ale w jezyku polskim bardzo czesto uzywa sie slow "szablon" i "wzorzec" zamiennie :)
