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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Односвязный список http://www.cyberforum.ru/cpp-beginners/thread277439.html
Помогите пожалуйста написать функцию поиска числа заданного пользователем в односвязном списке
C++ ЕГЭ Информатика С4 Задача: После единых выпускных экзаменов по информатике в район пришла информация о том, какой ученик, какой школы сколько баллов набрал. В районе считается подозрительной ситуация, когда в школе более двух учащихся набирают одинаковый наибольший балл по школе. Районный методист решила выяснить номера этих школ. Программа должна вывести номера этих школ, в любом порядке. Если аткая... http://www.cyberforum.ru/cpp-beginners/thread277434.html
C++ Динамическая библиотека
Как создать динамическую библиотеку, Объясните пожалуйста все пошагово. На Visual С++
"Длинные" числа C++
Здравствуйте, простите что отвлекаю. Я ещё только начинаю самостоятельно учиться программировать на С++. Вот double выводит ну гдето около миллиона, я непомню точно, а есть ли такой аргумент(или как это называеться) с помощью которого можно вывести например, 50 значное число или около того? P.S. Простите за вопрос.:)
C++ Описать структуру "Риелтор" http://www.cyberforum.ru/cpp-beginners/thread277399.html
Определить структурный тип содержащий следующую информацию: Фио риэлтора, тип квартиры, кол-во комнат, стоимость, дата продажи. Ввести 5 элементов данного типа. Распечатать информацию в табличном виде, расположив записи в алфавитном порядке по ФИО риэлтора. Подсчитать общую стоимость продаж, определить риэлтора который продал самую дорогую квартиру. вод что натворить смог #include...
C++ Решето Эратосфена понять алгоритм. Решето Эратосфена. Помогите пожалуйста понять алгоритм кода. На одном хостере видеороликов, есть учебное видео рассматривающий алгоритм сортировки массива (Решето Эратосфена ). #include <iostream> #include <iomanip> using namespace std; const int SIEVE_SIZE = 1000; подробнее

Показать сообщение отдельно
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
16.04.2011, 13:35     Наследование!За что мне всё это!?
Доброго времени суток уважаемые форум_чане! Занимаясь по Лафоре столкнулся с такой проблемой Вот частный случай! Задача 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;
}
Если я в чем то не прав объясните как это работает или должно работать!
Потому что Лафоре явно не очень сильно описывает тонкости таких вещей!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru