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

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

Войти
Регистрация
Восстановить пароль
 
Archeeey
7 / 7 / 1
Регистрация: 21.03.2011
Сообщений: 34
#1

Вопрос по наследованию - C++

21.03.2011, 19:27. Просмотров 343. Ответов 5
Метки нет (Все метки)

Вопрос насчёт передачи аргументов в конструктор базового класса(создания временного объекта), а именно почему у меня это не выходит и где у меня ошибка?


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
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
 
class ch
{
protected:
    enum{size = 10};
    char str[size];
public:
    ch ()
    {str[0] = '\0';}
    ch (char s[])
    {strcpy(str,s);}
 
    void view()
    {cout << str;}
 
};
 
class Pstring:public ch
{
public:
    Pstring ():ch()
    {}
    Pstring(char s[]) 
    {
        int i ;
        int n = strlen(s);
        if (n > size)
        {
            for ( i = 0 ; i < size-1;i++)
                str[i]= s[i];
            str[i] = '\0';
        }
        else
            ch (s);       //ошибка как мне кажется тут
    }   
};
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    Pstring s1,s2;
    char ch[] = "7896";
    s1 = ch;
    s1.view();
 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2011, 19:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос по наследованию (C++):

Вопрос по наследованию - C++
Уже неоднократно перечитывал главы про наследования и все равно до конца не разобрался. Вот например у нас есть класс Четырехугольник, и...

Вопросы по наследованию - C++
Вопрос ещё по конструкторам Допустим есть система классов class A { public: A() {} }; class B: public A {

Задание по наследованию классов - C++
Создать иерархию классов : линия - прямоугольник - пирамида. Все классы должны содержать методы для фиксации и получения значений всех...

Задача по наследованию в C++, нужно реализовать некоторые моменты - C++
Написать программу с объектами и реализовать наследование. Ситуация: Klimat (базовый объект), Derevo (выводной объект). a. Klimat:...

Задача по наследованию. Не понимаю некоторые моменты в формулировке задания - C++
Здравствуйте! Вот есть задание: Описать базовый класс СТРОКА Обязательные поля класса: # Указатель на char - хранит адрес...

"Предпочитайте композицию наследованию" - C++
Привет. В книге &quot;Стандарты программирования на С++&quot; есть совет 34: &quot;Предпочитайте композицию наследованию&quot; Хочу уточнить на счет...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.03.2011, 19:44 #2
Ошибок нет, есть непонимание того, что такое конструктор. Вы в строке 38 конструируете объект в никуда. Он создаётся и, поскольку имени не имеет, тут же уничтожается. Правильный вариант такой:
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
#include <iostream>
#include <string.h>
using namespace std;
 
class ch
{
protected:
        enum{size = 10};
        char str[size];
public:
        ch ()
        {str[0] = '\0';}
        ch (char s[])
        {strcpy(str,s);}
 
        void view()
        {cout << str;}
 
};
 
class Pstring:public ch
{
public:
        Pstring ():ch()
        {}
        
        Pstring(char s[]):
        ch(s)
        {
        }
};
 
 
 
int main()
{
        Pstring s1,s2;
        char ch[] = "7896";
        s1 = ch;
        s1.view();
 
        return 0;
}
Так и никак больше надо делать потому, что список инициализации и только он может инициализировать переменные родительского класса из дочернего посредством конструктора. Иначе вам в конструкторе Pstring пришлось бы повторить код конструктора ch.
1
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
21.03.2011, 19:50 #3
Конструктор б.к должен быть инициализирован до входа в тело констр п.к
C++
1
2
 Pstring(char s[]) 
        {}
был вызван конструктор по умолчанию б.к
а здесь
C++
1
2
else
 ch (s);
неименнованный объект
0
Archeeey
7 / 7 / 1
Регистрация: 21.03.2011
Сообщений: 34
21.03.2011, 20:00  [ТС] #4
спс, про конструкторы надо перечитать, насчет списка инициализации запомнил.
Хотя странно:в ответах в книге Лафоре код такой же как и у меня в 38 строке(создается временный объект в никуда ). Выкинуть Лафоре?
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.03.2011, 20:07 #5
А какая страница? Глянуть хочется, может там что-то другое подразумевалось?

Добавлено через 3 минуты
Уже увидел. Подозреваю, что это либо намеренная ошибка, либо (в чём сомневаюсь) раньше (до стандарта) так можно было делать о_О
0
Archeeey
7 / 7 / 1
Регистрация: 21.03.2011
Сообщений: 34
21.03.2011, 20:08  [ТС] #6
еще раз спс.)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 20:08
Привет! Вот еще темы с ответами:

Написать простейшую программу по "перегрузке" и "наследованию" - C++
написать простейшую программу на СИ++ по &quot;перегрузке&quot; и &quot;наследованию&quot;. заранее спасибо!

Вопрос по массивав, "институтский" вопрос. - C++
Готовлюсь к летней сессии по программированию. С++ Есть такая вот задачка (привожу как есть) В документации подобного не...

Вопрос по наследованию - C#
Вывод Hello СHild Hello Base Что сделать чтобы Base не выводило при подобном вызове? using System; namespace...

вопрос по наследованию - PHP ООП
начал изучать ООП в РНР. нужно уточнение. имеется класс статей Aticle и дочерний класс NewsArticle, они отличаются тем что у второго...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.03.2011, 20:08
Ответ Создать тему
Опции темы

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