С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
#1

Наследование!За что мне всё это!? - C++

16.04.2011, 13:35. Просмотров 379. Ответов 0
Метки нет (Все метки)

Доброго времени суток уважаемые форум_чане! Занимаясь по Лафоре столкнулся с такой проблемой Вот частный случай! Задача 8 9 глава:
".... Используя наследование добавьте такую возможность в класс "
C++
1
2
3
s2.left(s1,n)// в строчку s2 помещаются n самых левых символов строки s1
s2.mid(s1,s,n)// в строчку s2 помещаются n символов из строки s1 начиная с символа номер s 
s2.right(s1,n)//в строку s2  помещаются n самых правых символов строки s1
Задача не трудная я даже скажу что она проще париной репы! Но выполняя это задание заметил один косяк!!!!По условию мне нужно менять сам массив объекта
s2. Это можно сделать разными альтернативными способами! Вот например можно непосредственно работать с массивом s2 или создать временный объект и присвоить значение массива временного объекта массиву s2!
Вот только в тарой способ не работает!Я его реализую помощью конструктора и когда просматриваю по шагам то почему то вместо конструктора с одним аргументом вызывается конструктор без параметров!
Вот код
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include<iostream>
using namespace std;
#include<string>
//***************************************************************************************************************************
//базовый класс String
class String
{
    protected:
        enum{MAX=10};
    
        char mas[MAX];
    public:
        
    String()// ВОТ СЮДА ЗАХОДИТ!!!
    {mas[0]='\0';}
     String(char mas1[])// В МЕСТО ЭТОГО!!!
    {
         strcpy(mas,mas1);
    }
        
        inline void get_char()const//вывод на экран
        {
            cout<<mas<<endl;
        }
        operator char*()//преобразование от string в String
        {return mas;}
        inline void put_char()//ввод данных пользователем
        {
            cout<<"Введите строку : ";
            cin.get(mas,MAX-1);
        }
 
};
//***************************************************************************************************************************
// производный клас Pstring от String
class Pstring : public String
{
    public:
        Pstring():String()
        {}
        Pstring(char mas1[])//здесь проверяю что бы не было выхода за придел
        {int n=strlen(mas1);// массива
            if(n<MAX-1)
            {
                String(mas1);
            }
            else
            {
                
                    for(int i=0;i<MAX-1;i++)
                    {
                        mas[i]=mas1[i];
                    }
                    mas[i]='\0';
                
            }
        
        }
        inline void put_char()//ввод данных пользователем
        {
            cout<<"Введите строку : ";
            cin.get(mas,MAX-1);
        }
};
//***************************************************************************************************************************
// производный Pstring2 от Pstring
class Pstring2 : public Pstring
{
    public:
        Pstring2(): Pstring()
        {}
        Pstring2(char mas1[]):Pstring(mas1)
        {}
        inline Pstring2 left(Pstring2 const& value,int const& number_simvol_sum);//помещает n самых левых символов в строку
        inline Pstring2 mid(Pstring2 const& value,int const& at_first_simvol,int const& number_simvol_sum);//помещает n символов из строки начиная с at_first_simvol
        inline Pstring2 right(Pstring2 const& vlue,int const& number_simvol_sum);//помещает n самых правых символов в строку
};
//********************
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//косяк здесь если я как и в других методах буду работать с  массивом s2 то все //нормально но я хочу получить так допустим s2=s2.left(s1,n) 
// посмотрите по шагам почему в этом случае вызывается не тот конструктор??? 
//методы Pstring2
inline Pstring2 Pstring2::left(Pstring2 const& value,int const& number_simvol_sum)
{
    Pstring2 result;
    if(number_simvol_sum <MAX)//проверка на выход за границы массива
    {
        for(int i=0;i<number_simvol_sum;i++)
        {
        result.mas[i]=value.mas[i];
        }
        result.mas[i]='\0';
    }
    else
    {
        for(int i=0;i<MAX-1;i++)// если верх false то заполняем масив символами сколько в лезит с учетом границ
        {
            result.mas[i]=value.mas[i];
        }
        result.mas[i]='\0';
    }
    return Pstring2(result.mas);
}
//*********************
inline Pstring2 Pstring2:: mid(Pstring2 const& value,int const& at_first_simvol,int const& number_simvol_sum)
{
 
    if(number_simvol_sum <MAX)//проверка на выход за границы массива
    {
        for(int i=0;i<number_simvol_sum;i++)
        {
            mas[i]=value.mas[i+at_first_simvol];
        }
        mas[i]='\0';
    }
    else
    {
        for(int i=at_first_simvol;i<MAX-1;i++) // если верх false то заполняем масив символами сколько в лезит с учетом границ
        {mas[i]=value.mas[i+at_first_simvol];}
        mas[i]='\0';
    }
    return Pstring2(mas);
}
//**********************
inline Pstring2 Pstring2::right(Pstring2 const& vlue,int const& number_simvol_sum)
{
    int n=strlen(vlue.mas);
    //Pstring2 result;
    if(number_simvol_sum <MAX)//проверка на выход за границы массива
    {   
        for(int i=0;i<number_simvol_sum;i++)
        {
            mas[i]= vlue.mas[(n-number_simvol_sum)+i];
        }
        mas[i]='\0';
    }
    else
    {
        for(int i=0;i<MAX-1;i++)// если верх false то заполняем масив символами сколько в лезит с учетом границ
        {
            mas[i]= vlue.mas[(n-number_simvol_sum)+i];
        }
        mas[i]='\0';
    }
    return Pstring2(mas);
}
//***************************************************************************************************************************
// main()
int main(void)
{   
 
    class Pstring2 one("Stanislav"),two,three,four,five,nuw;
 
    nuw=two.left(one,5);
    two=two.left(one,5);
    three.mid(one,5,3);
    four.right(one,3);
    five=one;
    five.left(one,5);
    cout<<"one :";one.get_char();
    cout<<"two :";two.get_char();
    cout<<"three :";three.get_char();
    cout<<"four :";four.get_char();
    cout<<"five :";five.get_char();
    cout<<"nuw :";nuw.get_char();
    
 
    system("pause");
return 0;
}
Если я в чем то не прав объясните как это работает или должно работать!
Потому что Лафоре явно не очень сильно описывает тонкости таких вещей!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2011, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование!За что мне всё это!? (C++):

сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять? - C++
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь...

Всё компилируется, выводится, но не то что мне нужно - C++
Помогите пожалуйста, не понимаю, где что нужно добавлять! Задание: 1)Известны данные по продаже компьютеров в течение недели. Найти...

Полиморфизм и наследование - что это? - C++
Объясните плз как можно проще что значит полиморфизм и наследование? Если второе я более менее понял то с 1 проблема. В интернете не смог...

this это адресс объекта, а *this это сам объект. я всё правельно понял? - C++
this это адресс объекта, а *this это сам объект. я всё правельно понял?

Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала - C++
Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для...

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d &gt;&gt; c; cout&lt;&lt; f; вывод 0

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2011, 13:35
Привет! Вот еще темы с ответами:

Наследование, так ли это - C++
Вообщем вот какой вопрос. 1). Первый вариант. struct T { private: int f; int g; };

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

К знатокам С++: это самодостаточный язык, или всё таки он зависит от Си - C++
Объясните мне пожалуйста, ибо я не догоняю... Я изучаю С++, языка Си я не знаю. Читать родоночальника языка слишком для меня хардова,...

Боже ты мой! Как это всё противно после Delphi!!!!!!!!!!!! - C++
Умереть хочется


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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