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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
#1

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

24.12.2011, 22:14. Просмотров 2401. Ответов 8
Метки нет (Все метки)

Помогите плз разобраться с выводом.Прога вроде написана правильно а выводит не то что надо(какой то бред)
Задание:
В родительском классе исходные данные и вывод, рассчет в потомке. Вывод в родительском классе может быть сделан в любой секции. И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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 22:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследие классов С++ (C++):

Как можно реализовать наследие между параллелограммом и параллелепипедом? - C++
Подскажите,пожалуйста,как можно реализовать наследие между параллелограммом и параллелепипедом?? Задание: Описать иерархию классов:...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов - C++
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) - C++
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс - C++
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по диаграмме: У одного владельца...

Преобразования объектов классов в объекты других классов - C++
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

8
DU
1483 / 1129 / 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();
0
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 02:30  [ТС] #3
Так задание и заключается в том чтобы наследование было типа private
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 03:00 #4
Когда пишешь class Child: private Parent , то все поля Parent становятся приватными в Child. Т.е. функция Print будет недоступной для вызова вне класса. И даже преобразование типов тебе здесь не помошник.

Добавлено через 1 минуту
Функцию Print ты можешь вызвать например внутри конструктора класса Child, но не в функции main
0
Jaguar799
7 / 5 / 1
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 19:31  [ТС] #5
Я вызвываю функцию Print из класса parent а не из класса child. Для parent функция print public
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
25.12.2011, 19:46 #6
Ну так у тебя в P одни данные, а в C другие. Данные в P у тебя не инициализируются и на вывод идёт невесть что. Данные в C подсчитываются верно, но на печать-то не выводятся. О чём тебе и рассказывал коллега DU. Напиши в Child метод для вывода V и вызывай его на переменной C.
0
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 строчке кода это указано.
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
25.12.2011, 20:01 #8
Налицо непонимание того, что такое классы. Когда ты создаёшь переменную P - это отдельная переменная, экземпляр класса Parent, абсолютно никак не связанная с переменной C. А переменная C в свою очередь содержит внутри себя свой собственный экземпляр класса Parent. И свою собственную V. И P.V - это одна переменная, а C.V - совсем другая, она лежит в другом месте. Так вот ты инициализируешь C.V, и строка 21 работает над ней. А печатаешь не инициализированную P.V, в которой лежит неизвестно что.
1
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, в которой лежит неизвестно что.
БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!)
0
25.12.2011, 20:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 20:08
Привет! Вот еще темы с ответами:

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

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

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

наследование классов в C++ - C++
решил я с SDL поиграться.... ругается на 9 строчку компилятор, где ошибку допустил не подскажете?) main.cpp #include &lt;iostream&gt; ...


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

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

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