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

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

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

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

24.12.2011, 22:14. Просмотров 2316. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 22:14     Наследие классов С++
Посмотрите здесь:

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

наследование классов - C++
Народ, всем приветик! Уже 3 день сижу над етой темой, не получается задание, вчера выбрасывал на форум исходник, но в конце концов сделал...

наследование классов - C++
Здарова, народ! :D Вот сижу и пытаюсь сделать задание из книги по которой &quot;учимся программировать в универе&quot;, а там такой поворот...

Разработка классов - C++
Подскажите, пожалуйста, как это реализовать? А то я вообще не пойму(((

иерархия классов - C++
Создайте иерархию классов Point – Circle – Cylinder. Класс Point (точка) должен содержать координаты точки - х и у. Их следует объявить с...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1481 / 1057 / 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
62 / 62 / 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 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++
Народ, всем привет:D!!! 2 дня тому назад писал код в которм необходимо было добавить в базовый и производный классы констуктор с...

Реализация классов - C++
Помогите, пожалуйста, с 2-мя заданиями! 1) class A { public: A(); ~A(); private: D m_data;

Наследование классов - C++
никак не разберусь с наследованием, у нас тут в методичке дана по нему общая инфа, надо сделать как в методичке, но так не получается......

Наследование классов - C++
Здравствуйте. Помогите пожалуйста решить проблему по наследованию классов. Есть базовый класс class parent { ...

Сложение классов - C++
Есть некоторые классы class A {/*...*/}; class B{/*...*/}; class C { A a; B b; }; Как перегрузить +, чтобы...


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

Или воспользуйтесь поиском по форуму:
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     Наследие классов С++
Ответ Создать тему
Опции темы

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