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

Наследование, не понимаю в чем ошибка - C++

Восстановить пароль Регистрация
 
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
28.05.2011, 12:20     Наследование, не понимаю в чем ошибка #1
Задание из Лафоре, наследование. Даже пример есть, но почему-то не работает: в консоле выводит первые 79 символов s1 и все. VS 2010
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
class String                    //user-defined string type
{
protected:
    static const int SZ = 80;         //size of all String objects
    char str[SZ];             //holds a C-string
public:
    String()                  //no-arg constructor
    { str[0] = '\0'; }
    String( char s[] )        //1-arg constructor
    { strcpy(str, s); }    //   convert C-string to String
    void display() const      //display the String
    { cout << str; }
    operator char*()          //conversion operator
    { return str; }        //convert String to C-string
};
 
class Pstring :public String
{
public:
    Pstring(char s[]) 
    {
        if (strlen(s) > SZ-1)
        {
            for (int j=0; j<SZ-1; j++)
            {
                str[j]=s[j];
                str[j+1]='\0';      //в примере было str[j]='\0'; за циклом
            }
        }   
        else
            String(s);
 
    }
};
 
 
int main()
{
    Pstring s1 = "dkaaaaaaaaaaaaaaaaaaaaaakldkfkdfkdkthis is fucking long enough string will explode with stupid machine!!!!!!!!oneoneonedg"
        "gjbdjbgggjjdgjjgdjjdgjjdgjjg";
    cout << '\n'; s1.display();
    Pstring s2 = "This is short string";
    cout << '\n'; s2.display();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.05.2011, 12:48     Наследование, не понимаю в чем ошибка #2
Nubik756, Он и не будет работать. Суть вообще понимаете?) Если больше 79 символов - то записываем с начала строки ручками. Максимум 79 символов и будет)

Добавлено через 1 минуту
C++
1
2
3
4
5
                        for (int j=0; j<SZ-1; j++)
                        {
                                str[j]=s[j];
                                str[j+1]='\0';      //в примере было str[j]='\0'; за циклом
                        }
Ну и вот так лучше не делать. В примере было правильно.
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
28.05.2011, 12:55  [ТС]     Наследование, не понимаю в чем ошибка #3
Ну так 79 + символ конца строки вроде же как раз помещается в массив?
Имеется в виду, что вот такой вывод у меня http://i54.tinypic.com/f3ubo3.jpg , а должно быть еще s2.
В примере было правильно.
j же локальная для цикла. Так даже не компилилось.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.05.2011, 13:04     Наследование, не понимаю в чем ошибка #4
Nubik756, Ну да. Объявить j вне цикла никак?)

Добавлено через 5 минут
Вызывается конструктор по-умолчанию (без параметров) при создании второй строки.
Что логично. ТАК НЕЛЬЗЯ делать.

PString - производный класс от String. При вызове конструктора PString - вызывается пустой конструктор String, объект уже создан. Больше для него конструктор не вызвать. Советую переделать как-нибудь по-другому.
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
28.05.2011, 13:05  [ТС]     Наследование, не понимаю в чем ошибка #5
Объявить j вне цикла никак?)
Так и делал вначале, но думал что из-за этого так происходит )
Вызывается конструктор по-умолчанию (без параметров) при создании второй строки.
А почему?оО Вроде ж есть параметр) В примере тоже так.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.05.2011, 13:33     Наследование, не понимаю в чем ошибка #6
КХм. нет. не так. Советую просто функцию написать в таком случае.
Yandex
Объявления
28.05.2011, 13:33     Наследование, не понимаю в чем ошибка
Ответ Создать тему
Опции темы

Текущее время: 22:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru