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

Наследие классов С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
24.12.2011, 22:14     Наследие классов С++ #1
Помогите плз разобраться с выводом.Прога вроде написана правильно а выводит не то что надо(какой то бред)
Задание:
В родительском классе исходные данные и вывод, рассчет в потомке. Вывод в родительском классе может быть сделан в любой секции. Иcходные данные public наследование private. Оба контруктора с параметрами.



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
 #include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <iostream>
 
using namespace std;
 
class Parent
{
public:
    float V;
    void Print(){cout << V <<endl;}
};
 
class Child : private Parent
{
public:
    Child(float R, float H)
    {
        V=2*3.14*R*H;
    }
};
 
int main()
{
    setlocale(0,"");
    Parent P;
    Child C(2,5);
    P.Print();
    system("pause");
    return 1;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.12.2011, 22:56     Наследие классов С++ #2
C++
1
class Child : private Parent
наследование должно быть публичный. на данном уровне знаний лучше вообще забыть о протектед и привате наследовании.

C++
1
2
3
Parent P;
Child C(2,5);
P.Print();
тут вы создали два разных объекта. в родителе переменная V не проинициализирована. Поэтому строка P.Print(); выводит на экран значение непроинициализированной переменной, т.е. рандомное значение (к сожалению не помню всех хитростей в правилах инициализации мемберов в классах. поэтому всегда инициализирую их явно).

если хотите, чтобы ваш код вывел что-то осознанное, то вам нужно
1 - сделать наследование публичным,
2 - написать так:
C++
1
2
Child C(2,5);
С.Print();
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 02:30  [ТС]     Наследие классов С++ #3
Так задание и заключается в том чтобы наследование было типа private
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 03:00     Наследие классов С++ #4
Когда пишешь class Child: private Parent , то все поля Parent становятся приватными в Child. Т.е. функция Print будет недоступной для вызова вне класса. И даже преобразование типов тебе здесь не помошник.

Добавлено через 1 минуту
Функцию Print ты можешь вызвать например внутри конструктора класса Child, но не в функции main
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 19:31  [ТС]     Наследие классов С++ #5
Я вызвываю функцию Print из класса parent а не из класса child. Для parent функция print public
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
25.12.2011, 19:46     Наследие классов С++ #6
Ну так у тебя в P одни данные, а в C другие. Данные в P у тебя не инициализируются и на вывод идёт невесть что. Данные в C подсчитываются верно, но на печать-то не выводятся. О чём тебе и рассказывал коллега DU. Напиши в Child метод для вывода V и вызывай его на переменной C.
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 19:57  [ТС]     Наследие классов С++ #7
Цитата Сообщение от Nick Alte Посмотреть сообщение
Ну так у тебя в P одни данные, а в C другие. Данные в P у тебя не инициализируются и на вывод идёт невесть что. Данные в C подсчитываются верно, но на печать-то не выводятся. О чём тебе и рассказывал коллега DU. Напиши в Child метод для вывода V и вызывай его на переменной C.
Задание заключается в том чтобы вывод реализовать в родительском классе! Странно что V не присваивается из класса потомка хотя в 21 строчке кода это указано.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
25.12.2011, 20:01     Наследие классов С++ #8
Налицо непонимание того, что такое классы. Когда ты создаёшь переменную P - это отдельная переменная, экземпляр класса Parent, абсолютно никак не связанная с переменной C. А переменная C в свою очередь содержит внутри себя свой собственный экземпляр класса Parent. И свою собственную V. И P.V - это одна переменная, а C.V - совсем другая, она лежит в другом месте. Так вот ты инициализируешь C.V, и строка 21 работает над ней. А печатаешь не инициализированную P.V, в которой лежит неизвестно что.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 20:08     Наследие классов С++
Еще ссылки по теме:

наследование классов C++
C++ Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс
C++ Как можно реализовать наследие между параллелограммом и параллелепипедом?

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

Или воспользуйтесь поиском по форуму:
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 20:08  [ТС]     Наследие классов С++ #9
Цитата Сообщение от Nick Alte Посмотреть сообщение
Налицо непонимание того, что такое классы. Когда ты создаёшь переменную P - это отдельная переменная, экземпляр класса Parent, абсолютно никак не связанная с переменной C. А переменная C в свою очередь содержит внутри себя свой собственный экземпляр класса Parent. И свою собственную V. И P.V - это одна переменная, а C.V - совсем другая, она лежит в другом месте. Так вот ты инициализируешь C.V, и строка 21 работает над ней. А печатаешь не инициализированную P.V, в которой лежит неизвестно что.
БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!)
Yandex
Объявления
25.12.2011, 20:08     Наследие классов С++
Ответ Создать тему
Опции темы

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