Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
#1

Классы, конструктор копирования (разбор куска программы) - C++

06.05.2012, 21:31. Просмотров 562. Ответов 5
Метки нет (Все метки)

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class string{
   char *str;
   void load(char *s)    { str=strdup(s); }
   void add(char *s)     { str=(char*)realloc(str,strlen(str)+strlen(s)+1);
                         strcat(str,s); }
   int find(char *s)     { char *p=strstr(str,s); return p==NULL ? -1 : p-str; }
   int cmp(string &t)    { return strcmp(str,t.str); }
public:
   string(){ load(""); }
   string(char *s){ load(s); }
   string(string &t){ load(t.str); add(t.str+1); }
   ~string() { delete str; }
   string   &operator=(string &r) { delete str; load(r.str); return *this; }
   string   operator+(string &r) { string t(str); t.add(r.str); return t; }
   };
   string &EMPTY(string &s) { return s; }
 
void main(){
   string s1,s2("ab"),s3=s2;
   s1=EMPTY(s2);
   }
Помогите разобрать, что делает данный кусок программы. Желательно построчно - на уровне работы компилятора. Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2012, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы, конструктор копирования (разбор куска программы) (C++):

Классы. конструктор копирования - C++
Добрый вечер кодеры ;D Можете помоч с прогой?!.. Надо дописать конструктор копирования. Вроде как описал (не уверен что правильно) и...

Классы, конструктор копирования - C++
Здравствуйте! вот код: #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <iomanip.h> class matrix { ...

Классы (статические члены и конструктор копирования) - C++
Добрый вечер! Написал программку, все нормально работает, но есть два нюанса: необходимо сделать счетчик количества записей через...

Классы (объединить мой класс с проверкой на его работу, убрать гото и добавить конструктор копирования) - C++
Доброго времени суток. Подскажите как обьеденить мой класс с проверкой на его работу, убрать гото(заменить на что-то другое и добавить...

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <windows.h> #include <math.h> #include <algorithm> using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
06.05.2012, 22:03 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class string{
   char *str; //Здесь храним текст строки
   void load(char *s)    { str=strdup(s); }// копирование строки
   void add(char *s)     { str=(char*)realloc(str,strlen(str)+strlen(s)+1);// слияние 2 строк
                         strcat(str,s); }
   int find(char *s)     { char *p=strstr(str,s); return p==NULL ? -1 : p-str; }//поиск подстроки
   int cmp(string &t)    { return strcmp(str,t.str); }// сравнение строк
public:
   string(){ load(""); }// конструктор без параметров
   string(char *s){ load(s); } // конструктор из текстовой строки
   string(string &t){ load(t.str); add(t.str+1); } // копиконструктор
   ~string() { delete str; } // деструктор
   string   &operator=(string &r) { delete str; load(r.str); return *this; }// перегрузка операции "равно"
   string   operator+(string &r) { string t(str); t.add(r.str); return t; }//перегрузка сложения строк
   };
   string &EMPTY(string &s) { return s; } // функция, которая ничего не делает.
 
void main(){
   string s1,s2("ab"),s3;// s1,s3 пустые строки, s2 - строка с ab
   s3=s2;// копирование строки через оператор =
   s1=EMPTY(s2);// копирование строки через оператор = и пустую функцию.
   }
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
06.05.2012, 22:06 #3
По строкам:
1)Обьявление класса
2)У класса есть только 1 поле -- строка (массив символов) str
3)Метод, который делает строку такой же, как s
4,5)Метод, который дописывает в конец строки строку s
6)Метод, который ищет в составе строки str подстроку s, если находит, возвращает адрес ее начала (в символах от начала строки str), иначе -- -1
7)Метод, проверяющий одинаковость 2-х строк
8)Все методы выше и поле str были в области private, и программисту не доступны. Отныне идут доступные для программиста методы
9)Конструктор строки ""
10)Конструктор строки s -- фактически, преобразователь строки char* в string, может вызываться неявно
11)Конструктор копии строки t
12)Деструктор
13)Оператор, присваивающий строке строку r
14)Оператор, добавляющий к строке строку r
16)Без понятия. С моей точки зрения, абсолютно бессмусленная строка. Может, кто-то другой подскажет?
0
Jupiter
06.05.2012, 22:29
  #4

Не по теме:

Цитата Сообщение от ZiP-777 Посмотреть сообщение
Желательно построчно
это не значит что надо вытягивать методы в одну строку, так что сами и разбирайтесь в своем го*нокоде.
хотите чтоб ваш код читали - имейте совесть и пишите нормально

0
ZiP-777
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 24
07.05.2012, 17:02  [ТС] #5
Цитата Сообщение от Jupiter Посмотреть сообщение

Не по теме:


это не значит что надо вытягивать методы в одну строку, так что сами и разбирайтесь в своем го*нокоде.
хотите чтоб ваш код читали - имейте совесть и пишите нормально

Дело как раз в том, что код не мой, моя задача в нём разобраться. Спасибо всем откликнувшимся. Осталась пара вопросов по поводу работы операторов:
C++ (Qt)
1
2
 string   &operator=(string &r) { delete str; load(r.str); return *this; }
 string   operator+(string &r) { string t(str); t.add(r.str); return t; }
Для чего они вообще здесь нужны? Когда вызываются? Зачем нужен объект r, что там хранится?
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
07.05.2012, 17:19 #6
Они перегружают операции "Равно" и "сложение":
C++
1
2
3
string s2,s1("aaaaa");
s2=s1; // используется operator=
s2=s1+s2; // используется operator+
А r - это string, который стоит справа от знаков = или +
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 17:19
Привет! Вот еще темы с ответами:

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор копирования - C++
Добрый вечер, вообщем надо следить за модификатором доступа конструктора копирования и выводом: #include <iostream> using...

Конструктор копирования - C++
Ребята!! Вроде все получается, да только вот сделала конструктор копирования (А он мне, правда, нужен!) - и бух! программа ругается на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2012, 17:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru