Results 1 to 10 of 10
Hybrid View
-
24th June 2012 14:00 #1
C++ - ostream ãðåøåí output â êîíçîëàòà
Çäðàâåéòå,
Çà çàäà÷à èìàì äà íàïðàâÿ ñîáñòâåíà èìïëåìåíòàöèÿ íà string êëàñúò (ïîíå íà ÷àñò îò íåãî äå). Îáùî âçåòî ñúì ãîòîâ, íî ñðåùíàõ ñëåäíèÿ ïðîáëåì.
Ïðîáëåìúò å â ïîñëåäíèÿ ðåä - ñèìâîëèòå.Code:abcdefg 1 1 1& @☼>Press any key to continue . . .
Åòî main() êîéòî å íàïðàâåí ñàìî çà òåñò
è overload-a íà << (äåêëàðèðàë ñúì ãî êàòî friend, çà äà èìà äîñòúï äî data members):Code:int main(){ String a("abcdefgh"); cout<<a<<endl; String b; String c = a; cin >> b; cout << b << endl; cout << c; system("PAUSE"); return 0; }
Êàêòî ñå âèæäà, êîíñòðóêòîðà è êîïè êîíñòðóêòîðà ðàáîòÿò. >> ðàáîòè, çàùîòî b ñå âçèìà è ñå èçâåæäà áåç ïðîáëåì. Íî ïîñëå ðåøàâà îòíîâî äà èçâåäå b + ñëó÷àéíè ñèìâîëè äîïúëâàùè äî áðîÿ ñèìâîëè êîèòî òðÿáâà äà ñà â c. Íÿìàì èäåÿ çàùî ñå ïîëó÷àâà òàêàCode:ostream& operator<<(ostream& out,const String a){ if(a.length == 0) { return out;} for(int i = 0; i<a.length; i++){ out<<a.s[i]; } return out; }
Åäèò: Îïèòàõ ïúðâî äà èçâåäà C ïðåäè äà èçâåæäàì B è ÍßÌÀ ïðîáëåìè (èçâåæäà ñè abcdefgh). Ñàìî â òàçè ïîñëåäîâàòåëíîñò èìà.
-
24th June 2012 16:04 #2Registered User
Join Date: Jul:2004
Location: Ñîôèÿ
Posts: 621
Êîíñòðóêòîðèòå èçãëåæäàò ñúìíèòåëíè - ãóáè ñå åäíî "h" ïðè îòïå÷àòâàíåòî íà ñòðèíã À, îñâåí (ä)åôåêòà ñúñ ñòðèíã Ñ. Äàé ãè êàòî êîä, ïëç, çàåäíî ñ äåêëàðàöèèòå íà member-èòå.
// îôô: Êàòî ìàëêà ñòðàíè÷íà áåëåæêà, â operator<< ìîæåø äà ìèíåø è áåç ïðîâåðêàòà "if(a.length == 0)". Àêî À å ïðàçåí ñòðèíã, for-öèêúëúò ùå ñå èçïúëíè íóëà ïúòè è íàêðàÿ ïàê ùå ñå âúðíå out. Íå ÷å òàêà å ãðåøíî, íî ïîíå àç íå ñúì ôåí íà èçëèøíèòå ïðîâåðêè íà ãðàíè÷íè ñëó÷àè
-
24th June 2012 16:14 #3
Òîâà ñ "h"-à ñúì ãî îïðàâèë, ìîÿ ãðåøêà ñè áåøå è çà ñúæàëåíèå íå îïðàâÿ íåùàòà

Åòî ãî ñàìèÿ êëàñ + êîíñòðóêòîðèòå.
Code:class String{ public: String(); String(char* c); ~String(); String(const String& s); String& operator =(const String& b); bool operator==(String b); bool operator<(String b); bool operator>(String b); String& operator+(String b); int strlen(); friend ostream& operator<<(ostream& out,const String a); friend istream& operator>>(istream& in, String& a); private: char* s; int length; int size; }; String::String(){ length = 0; size = 0; } String::String(char* c){ int counter = 0; while( c[counter] != '\0'){ counter++; } length = counter; size = 2*counter; s = new char[size]; for(int i=0; i<length; i++){ s[i] = c[i]; } } String::String(const String& STR){ length = STR.length; size = STR.size; s = new char[size]; for(int i=0; i<length; i++){ s[i] = STR.s[i]; } } String::~String(){ delete[] s; } String& String::operator=(const String& b){ if ( this == &b ) { return *this; } delete[] s; s = new char[b.size]; size = b.size; length = b.length; for(int i=0; i<length; i++){ s[i] = b.s[i]; } return *this; }
-
24th June 2012 16:18 #4Registered User
Join Date: Jul:2004
Location: Ñîôèÿ
Posts: 621
Îùå íåùî: Âñåêè ïúò êîãàòî ñå âèêà operator<<, ñòðèíãúò ïîäàäåí êàòî âòîðè ïàðàìåòúð ñå ïðåäàâà ïî ñòîéíîñò, ò.å. ìó ñå âèêà copy-êîíñòðóêòîð-à è ìåòîäúò operator<< ðàáîòè ñ êîïèåòî. Âåðîÿòíî íå èñêàø äà ïðàâèø òàêà :-) Çà öåëòà, ïî-äîáðå å ïàðàìåòúðúò äà ñå ïîäàâà ïî reference: "const String& a."
Ñåãà ùå ðàçãëåäàì îñòàíàëîòî...
-
24th June 2012 16:20 #5
-
24th June 2012 17:02 #6Registered User
Join Date: Jul:2004
Location: Ñîôèÿ
Posts: 621
Íå ñúì ñúâñåì ñèãóðåí - êàòî öÿëî îñòàíàëèÿ êîä èçãëåæäà íàðåä. Èçîëèðàíåòî íà ïðîáëåìà å åäíî ñúâñåì íå-ëîøî óïðàæíåíèå

Äðóãî... Äîáðå å äà ñëîæèø "s = NULL;" â default-íèÿ êîíñòðóêòîð, çàùîòî âñå â åäèí ìîìåíò ñå âèêà "delete[] s" - íå ïîìíÿ âå÷å äàëè Ñ++ èíèöèàëèçèðàøå ñàì ìåìáúðèòå. Âúâ âòîðèÿ êîíñòðóêòîð ìîæå äà ïðîâåðÿâàø çà ñëó÷àÿ "c == NULL". Ìîæå äà ïîëçâàø è ôóíêöèèòå strlen() è memcpy() âìåñòî ÷àñò îò öèêëèòå.




Reply With Quote

Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè