Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- class String {
- char *p;
- unsigned int length;
- public:
- // 1
- String()
- :p(new char[0]), length(0)
- {
- std::cout << "1, p="<< (void*)p << ", length=" << length << std::endl;
- }
- // 2
- String(char *p) :p(p), length(strlen(p)) { std::cout << "2" << std::endl; }
- // 3
- String(const String &s) {
- if(!s.p) throw "3 err";
- length = strlen(s.p);
- p = new char[length+1];
- strncpy(p, s.p, length + 1);
- std::cout << "3" << std::endl;
- }
- // 4
- ~String() {
- std::cout << "4" << std::endl;
- }
- // 5
- String operator+(String &s) {
- char *resp;
- if(!p || !s.p) {
- throw "5 err";
- }
- resp = new char[length + s.length + 1];
- strncpy(resp, p, length + 1);
- strncpy(resp + length, s.p, s.length + 1);
- std::cout << "5" << std::endl;
- return resp;
- }
- // 6
- char &operator[](int i) {
- std::cout << "6" << std::endl;
- return p[i];
- }
- // 7
- String &operator=(String &s) {
- if(&s == this) return *this;
- std::cout << "7" << std::endl;
- if(p) delete[] p;
- length = s.length;
- p = new char[length + 1];
- strncpy(p, s.p, length + 1);
- return *this;
- }
- String &operator=(const String &s) {
- if(&s == this) return *this;
- std::cout << "7rval" << std::endl;
- if(p) delete[] p;
- length = s.length;
- p = new char[length + 1];
- strncpy(p, s.p, length + 1);
- return *this;
- }
- };
- int main() {
- using namespace std;
- cout << "eleje" << endl;
- String s1("rejtvény");
- cout << "s1 létrehozás után" << endl;
- String s2;
- cout << "s2 után" << endl;
- String s3 = s2;
- cout << "s3 után" << endl;
- char c = s3[3];
- cout << "operator[] után" << endl;
- s2 = s3;
- cout << "operator= után" << endl;
- s2 = s3 + s2 + s1;
- cout << "operator+, operator= után" << endl;
- return 0;
- }
- namespace {
- struct C {
- ~C() { std::cout << "main után" << std::endl; }
- } _c;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement