Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
1

Вызов объектом базового класса функцию из производного класса!

16.12.2016, 15:16. Просмотров 3448. Ответов 41
Метки нет (Все метки)

Как можно осуществить вызов или передачу значения в базовый класс для дальнейшего вычисления этого значения в производном классе.

Вот код программы:

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
53
54
55
56
57
58
59
60
#include <iostream>
using namespace std;
 
class FirstClass    
{
protected:          
    int value;
public:
 
    FirstClass()
    {
        value = 0;
    }
 
    FirstClass( int input )
    {
        value = input;
    }
 
    void show_value()
    {
        cout << value << endl;
    }
};
 
class SecondClass : public FirstClass   
{
public:
    SecondClass() : FirstClass ()   
    {}
 
    SecondClass(int inputS) : FirstClass (inputS)      {}
 
    void ValueSqr () 
    {
        value *= value;    
    }  
};
 
void main()
{
    setlocale(LC_ALL, "rus");
 
    FirstClass F_object(3);     
    cout << "value F_object = ";
    F_object.show_value();
 
    SecondClass S_object (4);    
    cout << "value S_object = ";
    S_object.show_value();  
 
    S_object.ValueSqr();       
    cout << "квадрат value S_object = ";
    S_object.show_value();
 
    //F_object.ValueSqr(); // Как это реализовать?
 
    cout << endl;
    system("pause");
}
Добавлено через 12 минут
Т.е. как воспользоваться созданными функциями-объектами в производных классах? Может быть надо создать ещё один класс наследник? Как это можно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2016, 15:16
Ответы с готовыми решениями:

Как сложить объект базового класса с объектом производного(наследуемого класса)
Как умножить объект базового класса с объектом производного(наследуемого класса): ozenka - объект...

Возможно ли указатель производного класса инициализировать объектом базового класса?
имеется связка наследуемых классов A-&gt;B а от B наследуются одновременно еще два класса B-&gt;C и B-&gt;D...

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp,...

Что происходит когда передается в функцию базового класса аргумент с типом производного класса?
Есть функция перегруженного оператора&quot;+&quot; в производном классе и в базовом классе который принимает...

41
Заблокирован
16.12.2016, 15:38 2
Цитата Сообщение от Maxim09 Посмотреть сообщение
передачу значения в базовый класс для дальнейшего вычисления этого значения в производном классе.
никакие значения в никакие классы не передаются. Данные находятся в объектах. Если только это не статика.
Цитата Сообщение от Maxim09 Посмотреть сообщение
Т.е. как воспользоваться созданными функциями-объектами в производных классах?
как обычно.
Цитата Сообщение от Maxim09 Посмотреть сообщение
//F_object.ValueSqr(); // Как это реализовать?
никак. Если предок что-то знает о наследниках, то это не ООП.
в вашем случае достаточно перенести void ValueSqr () в первый класс, но тогда непонятен весь огород с наследованием.
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 15:53  [ТС] 3
Я хочу посчитать квадрат значения передаваемого в базовый класс той функцией что находится в производном классе.
0
Заблокирован
16.12.2016, 16:21 4
Вы создаете объект базового класса и хотите выполнить функцию производного класса? Не получится. Создавайте объект - наследник
1
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 16:23  [ТС] 5
Т.е. создать объект в производном классе который унаследует значение объекта из базового класса так?
0
Заблокирован
16.12.2016, 16:27 6
Вы запутали уже окончательно. В Вашем примере было создание объекта именно базового класса. Этот объект ничего не знает, и не должен знать, о функциях производных классов. Создавайте потомков и пользуйтесь. Ну или я не понимаю что вы хотите спросить..
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
16.12.2016, 16:27 7
Если лезут такие вопросы - значит проблема с проектированием классов. Вам надо чётко разделить задачи на абстракции.
Чем должен заниматься первый класс, чем второй?
1
Заблокирован
16.12.2016, 16:28 8
Цитата Сообщение от Maxim09 Посмотреть сообщение
F_object.ValueSqr(); // Как это реализовать?
вот это ваш вопрос. Ответ - никак
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 16:30  [ТС] 9
Эта идея возникла в процессе изучения этого примера, я бы хотел чтоб значение передаваемое в базовый класс: FirstClass F_object(3);
Можно было возвести в квадрат в производном классе и вызвать эту ф-цию.
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
16.12.2016, 16:30 10
Возможно, требуется что-то типа этой схемы?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
struct A
{
    A(const int x_) : x(x_) {}
    virtual ~A() = default;
    virtual void process() const = 0;
    int x;
};
 
struct B : A
{
    using A::A; // использовать конструкторы базового класса
    void process() const override { std::cout << x << std::endl; }
};
 
int main()
{
    B b(2);
    b.process();
}
Базовый класс хранит значение, но не умеет с ним работать и требует этого от потомков.
1
Заблокирован
16.12.2016, 16:43 11
Цитата Сообщение от MrGluck Посмотреть сообщение
Базовый класс хранит значение, но не умеет с ним работать и требует этого от потомков.
Однако ТС создает объект базового класса и хочет от него поведения потомка.
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 16:47  [ТС] 12
Цитата Сообщение от nazaarych Посмотреть сообщение
Однако ТС создает объект базового класса и хочет от него поведения потомка.
Я хочу посчитать квадрат этого FirstClass F_object(3);.
Т.е. квадрат значение (3) которое передаётся объекту в Б.К. но чтоб вычисления выполнялись в П.К.
Я написал следующее но выдаёт квадрат от уже вычисленного квадрата этого SecondClass S_object (4);

C++
1
2
3
4
5
void Kvadrat ()
    {
        kv = FirstClass::value;
        cout<<pow(kv,2.0)<<"\n";
    }
Это я поместил в П.К.
0
Заблокирован
16.12.2016, 16:54 13
Цитата Сообщение от Maxim09 Посмотреть сообщение
Я хочу посчитать квадрат этого FirstClass F_object(3);
его не существует
Цитата Сообщение от Maxim09 Посмотреть сообщение
Т.е. квадрат значение (3) которое передаётся объекту в Б.К. но чтоб вычисления выполнялись в П.К.
ооп так и устроено. Здесь все нормально.
Только вы почему-то хотите наоборот. Создаете объект базового класса и хотите чтобы он выполнял действие мифических(неизвестных базовому) потомков.
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 16:59  [ТС] 14
А как можно создать объект в П.К. которому можно было-бы присвоить значение объекта из Б.К. а потом его возвести в квадрат?

Добавлено через 2 минуты
А вот тут:
C++
1
2
3
4
SecondClass() : FirstClass ()   
    {}
 
    SecondClass(int inputS) : FirstClass (inputS)      {}
Мы вызываем конструктор из Б.К. и передаём ему значение объекта так?
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
16.12.2016, 17:02 15
Цитата Сообщение от Maxim09 Посмотреть сообщение
А как можно создать объект в П.К. которому можно было-бы присвоить значение объекта из Б.К.
Что значит присвоить значение? Потомок итак имеет все те же свойства, что и базовый класс. Вы когда объект производного класса создаёте, он уже имеет все данные "базового класса".

Добавлено через 1 минуту
Цитата Сообщение от Maxim09 Посмотреть сообщение
Мы вызываем конструктор из Б.К. и передаём ему значение объекта так?
Мы при создании объекта производного класса вызываем конструктор базового с передачей аргументов.
0
Заблокирован
16.12.2016, 17:04 16
ПК это производный класс? Создаете и получаете... Может быть вы не понимаете, не создается объект базового класса в потомке. Это один объект, дополненный новыми возможностями потомка. Это один объект. Никакого базового нет. Есть базовый плюс новые возможности..
С дургого конца если зайти. А чего вы хотите?Идея осталась непонятна
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
16.12.2016, 17:04 17
Вы посмотрите на мой пример.
Цитата Сообщение от MrGluck Посмотреть сообщение
using A::A;
Объявляет конструкторы в производном классе, которые все свои аргументы передают соответствующим конструкторам базового класса. Только делает это автоматически, избавляя от рутины.
0
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 17:04  [ТС] 18
Но у П.К нет своего объекта, это value объект Б.К. по моему.
0
Заблокирован
16.12.2016, 17:09 19
он объект
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
16.12.2016, 17:11 20
Цитата Сообщение от Maxim09 Посмотреть сообщение
Но у П.К нет своего объекта, это value объект Б.К. по моему.
Возьмём класс "Человек". У него есть "свойство" - голова. То есть каждый объект класса "Человек" имеет голову.
Возьмём класс "Женщина". Объекты данного класса являются подмножеством объектов класса "Человек". Судя по вашей логике, объект класса "Женщина" не имеют "свойства" голова?
Да вы, уважаемый, феминист
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2016, 17:11

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

Вызов методов производного класса из базового
Возможно ли, чтобы class A { void f1() { f2();//если вызвано из B, то вызывается B::f2(), а...

Вызов виртуального метода базового класса из указателя производного
Допустим есть такой код: #include &lt;iostream&gt; class Base { public: virtual void f() {...

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом чтоб его...

Создание указателя типа базового класса на экземпляр производного класса
Добрый день! Иногда видел коды, где создавался указатель типа базового класса на объект класса -...

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс равносторонний...

Указатель на объект базового класса и адрес объекта производного класса
Пример кода: class Class1 { public: Class1(int x) { j = new int; *j = x; }...


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

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

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