Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- каждый класс должен содержать только необходимый минимум методов для работы со своими полями.
- вот например если класс строка то методы должны быть следующие.
- конструкторы:
- IMyString(const char *str){}
- IMyString(const std::string *str){}
- IMyString(const IMyString &str){} //Создается обычно автоматически, но если тебе нужны фичи то определяешь по своему.
- Операторы копирования:
- IMyString & operator=(const std::string &str){}
- IMyString & operator=(const char *str){}
- IMyString & operator=(const IMyString &str){} //Это тоже автоматом пилится. Необходим для конструкций типа IMyString A("wtf"), B("yoba");
- B = A; //B == "wtf"
- Операторы сложения:
- IMyString & operator+(const IMyString &str){}
- IMyString & operator+(const std::string &str){}
- IMyString & operator+(const char *str){}
- Методы для работы со строкой:
- unsigned size()
- {
- return length-1; //чаще всего для компактности хранится начало и конец массива и отдается вычетание.
- }
- IMyString & append(const IMyString &str)
- {
- return self_string+str;
- }
- class IMyString
- {
- char *self_string;
- unsigned length = 0;
- void init(const char *str)
- {
- length = strlen(str);
- self_string = new char[length];
- *self_string = *str;
- }
- public:
- IMyString(const char *str)
- {
- init(str);
- }
- IMyString(const std::string *str)
- {
- init(str.c_str());
- }
- IMyString(const IMyString &str)
- {
- init(str.self_string); //Тут (еще не уверен вроде бы работает), поля другого класса нашего типа являются дружественными, и мы можем получить к ним доступ.
- }
- }
- ну и тд
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement