Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Jaguar799
7 / 5 / 2
Регистрация: 08.10.2010
Сообщений: 57
1

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

24.12.2011, 22:14. Просмотров 3612. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2011, 22:14
Ответы с готовыми решениями:

ТРОН наследие
Как Вам фильм?

Классы.Наследие и Полиморфизм
Для интерфейса использовать модуль Windows.Form. Реализовать три класса (один - класс родитель,...

Сказ про множественное наследие
Доброе время суток! Ситуация прям хз как решать. Пишу сервер который должен вещать всякую хрень...

Тема : наследие. Выводит ошибку в коде
Ругается на строки: { fio=f; cafedra=c; } using System; using...

8
DU
1491 / 1137 / 165
Регистрация: 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 / 2
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 02:30  [ТС] 3
Так задание и заключается в том чтобы наследование было типа private
0
darkknight2008
62 / 62 / 11
Регистрация: 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 / 2
Регистрация: 08.10.2010
Сообщений: 57
25.12.2011, 19:31  [ТС] 5
Я вызвываю функцию Print из класса parent а не из класса child. Для parent функция print public
0
Nick Alte
Эксперт С++
1658 / 1030 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
25.12.2011, 19:46 6
Ну так у тебя в P одни данные, а в C другие. Данные в P у тебя не инициализируются и на вывод идёт невесть что. Данные в C подсчитываются верно, но на печать-то не выводятся. О чём тебе и рассказывал коллега DU. Напиши в Child метод для вывода V и вызывай его на переменной C.
0
Jaguar799
7 / 5 / 2
Регистрация: 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
Эксперт С++
1658 / 1030 / 174
Регистрация: 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 / 2
Регистрация: 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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 20:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Наследие и Полиморфизм - Средства передвижения, автомобиль, поезд
Для интерфейса использовать модуль Windows.Form. Реализовать три класса (один - класс родитель,...

Как можно реализовать наследие между параллелограммом и параллелепипедом?
Подскажите,пожалуйста,как можно реализовать наследие между параллелограммом и параллелепипедом??...

Построить класс наследие Exception и придать какую-то функциональность
построить класс наследие Exception и придать какуюто функциональность спасибо

История и наследие Half-Life от NoClip (РУССКАЯ ОЗВУЧКА)
Фанаты игры (к которым я отношу и себя) оценят фильм по достоинству. B0Ufeze6s20 Оригинал -...


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

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

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