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

Объектно-ориентированное программирование: Разработка класса строка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вписанная окружность в треугольник http://www.cyberforum.ru/cpp-beginners/thread577584.html
Помогите пожалуйста написать на C программу которая проверяла бы окружность радиуса R в треугольник. Как я понял стороны треугольника надо задавать. Нашел формулу на википедии радиуса вписанной окр....
C++ Вопрос на экзамене.(Оператор) Какой оператор может быть визовом подпрограмми F, аргументом которой есть массив m, из 5 елементов. http://www.cyberforum.ru/cpp-beginners/thread577582.html
Разность max и min элементов последовательности и массив C++
1. Дано 100 вещественных чисел. Вычислить разность между максимальным и минимальным из них. 2. В одномерном массиве, состоящем из n вещественных элементов, вычислить: • сумму положительных...
C++ Программа считающая сумму десятичных чисел в двоичной системе(на Си)
Помогите пожалуйста(!) написать программу со счётом суммы через двоичную систему( с экрана вводят десятичные числа). Проблема в том что ни как не могу перевести числа в др. систему, и ещё не знаю...
C++ Напишите программу, которая по заданной траектории Волка определяет на сколько полных оборотов Волк замотал Зайца http://www.cyberforum.ru/cpp-beginners/thread577540.html
Заяц стоит в центре большого катка и поет свою любимую песенку в игрушечный микрофон. От микрофона тянется достаточно длинный шнур, конец которого находится в руках у Волка. Волк хочет незаметно...
C++ Выделить числа из строки и разместить в массив Само задание : Во введенной пользователем строке могут содержаться слова и целые числа, разделенные пробелами. Выделить из нее числа и разместить их в отдельный числовой массив без дублирования.... подробнее

Показать сообщение отдельно
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
17.05.2012, 16:47
С остальным сами, а то не интересно так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <cstring>
#include <stdexcept>
 
class String
{
public:
   String():length_(0), is_copied_(false), string_(0)
   {
   }
   String(const char* str, const size_t len):length_(len), is_copied_(true)
   {
      string_ = new char[length_ + 1];
      strncpy(string_, str, length_);
      string_[length_] = '\0';
   }
   String(const char* str):length_(strlen(str)), is_copied_(true)
   {
      string_ = new char[length_ + 1];
      strncpy(string_, str, length_);
      string_[length_] = '\0';
   }
   ~String()
   {
      if (is_copied_)
      {
         delete[] string_;
         is_copied_ = false;
      }
   }
   String(const String& rhs)
   {
      is_copied_ = false;
      string_ = rhs.string_;
      length_ = rhs.length_;
   }
   String& operator =(const String& rhs)
   {
      is_copied_ = false;
      delete[] string_;
      String tmp(rhs);
      swap(tmp);
      return *this;
   }
   char& operator[](const size_t idx)
   {
      if (idx >= length_)
      {
         throw std::out_of_range("wrong index");
      }
      Copy();
      return string_[idx];
   }
   const char& operator[] (const size_t idx) const
   {
      if (idx >= length_)
      {
         throw std::out_of_range("wrong index");
      }
      return string_[idx];
   }
   String& operator += (const String& rhs)
   {
      Copy();
      char* tmp = new char[length_ + rhs.length_ + 1];
      strncpy(tmp, string_, length_);
      tmp[length_] = '\0';
      delete[] string_;
      strcat(tmp, rhs.string_);
      length_ += rhs.length_;
      tmp[length_] = '\0';
      string_ = tmp;
      return *this;
   }
   const char* string() const { return string_; }
   const size_t length() const { return length_; }
private:
   void swap(String& rhs)
   {
      std::swap(string_, rhs.string_);
      std::swap(length_, rhs.length_);
   }
   void Copy()
   {
      if (!is_copied_)
      {
         char* new_string = new char[length_ + 1];
         strncpy(new_string, string_, length_);
         new_string[length_] = '\0';
         string_ = new_string;
         is_copied_ = true;
      }
   }
   char* string_;
   size_t length_;
   bool is_copied_;
};
 
std::ostream& operator << (std::ostream& os, const String& rhs)
{
   os << rhs.string() << std::endl << "Address: " << (void*)rhs.string();
   return os;
}
 
String operator +(const String& lhs, const String& rhs)
{
   String result(lhs);
   result += rhs;
   return result;
}
 
bool operator == (const String& lhs, const String& rhs)
{
   return !strcpy(lhs.string(), rhs.string());
}
 
bool operator != (const String& lhs, const String& rhs)
{
   return !(lhs == rhs);
}
 
int main()
{
   String tmp("hello");
   String other("other");
   tmp = other;
   std::cout << tmp << std::endl;
   std::cout << other << std::endl;
   tmp[0] = 'a';
   std::cout << tmp << std::endl;
   std::cout << other << std::endl;
   tmp[1] = 'c';
   std::cout << tmp << std::endl;
   std::cout << other << std::endl;
   tmp += other;
   std::cout << tmp << std::endl;
   std::cout << other << std::endl;
   String new_s = tmp + other;
   std::cout << tmp << std::endl;
   std::cout << other << std::endl;
   std::cout << new_s << std::endl;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru