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

Свой класс String - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ do this 10 second's http://www.cyberforum.ru/cpp-beginners/thread358119.html
вобщем сабж. Имеется некоторая функция foo. Хочется, чтобы она выполнялась 10 секунд: int timer = 10 //секунд; while(timer){ foo() } Как попроще реализовать? Добавлено через 1 минуту редактирование не работает. Имелось ввиду: int timer = 10 //секунд; while(timer){ foo() }
C++ char посоветуйте книжку где по подробнее описывается взаимодействие в char на c http://www.cyberforum.ru/cpp-beginners/thread358102.html
Объявление массивов в С/С++ C++
Пытаюсь создать матрицу размера n: #include <iostream> using namespace std; int main() { int n,i,j; int m; cout << "Введите n\n"; cin >> n;
error C2601: 'main' : local function definitions are illegal fatal error C1004: unexpected end of file found C++
День добрый люди написал програму выдает 2 ошибки че не так подскажите error C2601: 'main' : local function definitions are illegal fatal error C1004: unexpected end of file found #include "stdafx.h" #include <iostream> #include <string.h> #include <conio.h> using namespace std;
C++ Алгометрические мовы та программирование http://www.cyberforum.ru/cpp-beginners/thread358080.html
помогите написать я сам не программис и не когда не учился , может у кого то что то есть ) плиз помогите Желательно бесплатно :cry:
C++ Помощь в создании массива на c++ Прошу помощи в задании, заранее спасибо. Даны вещественные массивы n от 20,определить для каждого массива является ли он возрастающей последовательностью и вычислить средне геометрического всех положительных элементов массива. Если не сложно, прошу пояснить момент со средне геометрическим. подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
29.09.2011, 20:20  [ТС]     Свой класс String
Ладно, допустим насчёт того Srep понял, сейчас попробую поправить, а насчёт Rangee всё равно не понял, с ним то что не так? Обычный класс для исключений, он полностью определён до того как я захотел его выбросить так что же не нравится компилятору?

Добавлено через 13 минут
А, уже понял, у меня там название у исключения чуть другое. Вот перетащил определения тех классов и получилось так:
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
#include <iostream>
#include <cstring>
using namespace std;
 
class String
{
class Srep
    {
    public:
        char *s;//указатель на элемент
        int sz;//кол-во символов
        int n;//счётчик символов
 
        Srep(int nsz, const char *p)
        {
            n=1;
            sz=nsz;
            s=new char[sz+1];
            strcpy(s,p);
        }
 
        ~Srep(){delete []s;}
 
        Srep* get_own_copy()
        {
            if(n==1) return this;
            n--;
            return new Srep(sz,s);
        }
 
        void assign(int nsz, const char* p)
        {
            if (sz!=nsz)
            {
                delete[] s;
                sz=nsz;
                s=new char[sz+1];
            }
            strcpy(s,p);
        }
        private:
        Srep (const Srep&);
        Srep& operator=(const Srep&);
    };
 
    class Cref
    {
        friend class String;
        String &s;
        int i;
        Cref(String & ss, int ii):s(ss),i(ii){}
        Cref(const Cref& r):s(r.s),i(r.i){}
        Cref();
 
    public:
        operator char() const{s.check(i);return s.read(i);}//выдаёт значение
        void operator=(char c) {s.write(i,c);}
    };
 
 
    Srep *rep;
 
public:
    class Range{};//исключения
    String();//x=""
    String (const char*);//x="abc"
    String (const String&);//x=other_string
    String& operator=(const char*);
    String& operator=(const String&);
 
    void check(int i) const;
 
    char read(int i) const {return rep->s[i];}
    void write(int i,char c){rep=rep->get_own_copy();rep->s[i]=c;}
    Cref operator[](int i){check(i);return Cref(*this,i);}
    char operator[](int i) const{check(i);return rep->s[i];}
    int size() const{return rep->sz;}
    ~String();
};
 
String::String()
{
    rep=new Srep(0,"");
};
 
String::String(const String& x)
{
    x.rep->n++;
    rep=x.rep; //разделяемое представление
};
 
String::~String()
{
    if(--rep->n==0) delete rep;
};
 
String &String::operator=(const String &x)
{
    x.rep->n++;//защита от "st=st"
    if(--rep->n==0) delete rep;
    rep=x.rep;
    return *this;
};
 
String::String(const char* s)
{
    rep=new Srep(strlen(s),s);
};
 
String& String::operator=(const char *s)
{
    if(rep->n==1)
     rep->assign(strlen(s),s); //используем старый Srep
    else
    {
        rep->n--;
        rep=new Srep(strlen(s),s);//используем новый Srep
    }
    return *this;
};
 
void String::check(int i) const
{
    if(i<0 || (rep->sz)<=i) throw String::Range();
};
 
 
 
 
 
 
 
int main()
{
 
}
 
Текущее время: 20:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru