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

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

16.12.2016, 15:16. Показов 15526. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2016, 15:16
Ответы с готовыми решениями:

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

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

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

41
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 17:16  [ТС]
Студворк — интернет-сервис помощи студентам
А как можно передать из main функции в Б.К. значение для его объекта, а после в П.К. возвести это значение в степень 2?
Т.е. выполнить само действие возведения в квадрат в П.К?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.12.2016, 17:19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
struct A
{
    int value;
    A(const int x) : value(x) {}
};
 
struct B : A
{
    B(const int x) : A(x) {}
    void ValueSqr() { value *= value; }
};
 
int main()
{
    B b(2);
    b.ValueSqr();
    std::cout << b.value;
}
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 17:50  [ТС]
MrGluck,
Скажите а под этим
Цитата Сообщение от MrGluck Посмотреть сообщение
Возьмём класс "Человек". У него есть "свойство" - голова.
вы имели ввиду элементы класса так?
0
Заблокирован
16.12.2016, 18:01
есть амёба. У нее нет головы. Человек от амёбы произошел. У него есть голова. Вы по ходу выполнения программы создаете амебу и хотите что-бы у нее была голова?
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 18:05  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Объекты данного класса являются подмножеством объектов класса "Человек".
А как понять это? Сори что туплю, но очень ахота разобраться
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.12.2016, 18:08
Цитата Сообщение от Maxim09 Посмотреть сообщение
элементы класса так?
свойства - данные/элементы/члены/переменные класса. Всё это можно по разному называть. Считайте, что это элементы.

Добавлено через 1 минуту
Цитата Сообщение от Maxim09 Посмотреть сообщение
А как понять это?
Там вроде бы по русски написано.
Объект класса натуральные числа являются подмножеством класса числа.
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 18:21  [ТС]
Я в смысле подмножество это как? т.е. объекты класса Ж наследники объектов класса Ч?

Добавлено через 10 минут
Или же объекты класса Ж наследуют те же элементы что и объекты класса Ч так? Потому что элементы класса Ч в protected:-е верно?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.12.2016, 18:34
Можно через указатели.
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
#include <iostream>
 
struct A
{
    int value;
    virtual ~A() = default;
};
 
struct B : public A
{
    void valuePow2() 
    {
        value *= value;
    }
};
 
int main()
{
    A* b = new A;
    b->value = 10;
    std::cout << b->value << "\n";
    static_cast<B*>(b)->valuePow2();
    std::cout << b->value << "\n";
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.12.2016, 18:38
Для каста по иерархии наследования лучше использовать dynamic_cast. Преобразования static_cast не так безопасны, как преобразования dynamic_cast, поскольку static_cast не выполняет проверку типа во время выполнения, а dynamic_cast выполняет. Применение dynamic_cast к неоднозначному указателю завершится ошибкой, тогда как static_cast возвращает результат, как будто бы все в порядке; это может быть опасно.
https://msdn.microsoft.com/ru-... yw7x9.aspx
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.12.2016, 18:51
Что-то я не то сделал.
Вот так правильней.
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
#include <iostream>
 
struct A
{
    int value;
    virtual ~A() = default;
};
 
struct B : public A
{
    void valuePow2() 
    {
        value *= value;
    }
};
 
int main()
{
    A* b = new B;
    b->value = 10;
    std::cout << b->value << "\n";
    dynamic_cast<B*>(b)->valuePow2();
    std::cout << b->value << "\n";
}
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 19:05  [ТС]
GbaLog-,
Почему-то не работает
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.12.2016, 19:07
Цитата Сообщение от Maxim09 Посмотреть сообщение
Почему-то не работает
Что не работает? У меня всё работает.
http://rextester.com/XDR63054
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 19:09  [ТС]
Вот код ошибки если правильно скопировал:
ссылка на неразрешенный внешний символ "public: virtual __thiscall A::~A(void)" (??1A@@UAE@XZ) в функции "public: virtual __thiscall B::~B(void)" (??1B@@UAE@XZ)
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.12.2016, 19:13
Цитата Сообщение от GbaLog- Посмотреть сообщение
Что-то я не то сделал.
Наглядный пример для чего нужен dynamic_cast.
Думаю, что предыдущий код это UB. Лень лезть в стандарт.

Добавлено через 43 секунды
А если так:
C++
1
virtual ~A() {}
1
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 19:15  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
А если так:
А так заработало.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.12.2016, 19:17
Цитата Сообщение от MrGluck Посмотреть сообщение
А если так:
Вот так и думал, что тут ошибка. Странно...
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.12.2016, 19:18
Цитата Сообщение от GbaLog- Посмотреть сообщение
Вот так и думал, что тут ошибка.
Это не ошибка (с точки зрения новых стандартов), просто компилятор ТС не поддерживает С++11.
1
16.12.2016, 19:21

Не по теме:

Фух. Камень с плеч. Значит моё представление об default - правильное, а то уже начал волноваться.

0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
16.12.2016, 19:47  [ТС]
Скажите а как можно переделать тот пример который привёл я в шапке темы таким образом чтобы квадрат переменной Базового класса тоже выводило? может как-то так?
C++
1
2
3
4
5
void Kvadrat ()
    {
        kv = FirstClass::value;
        cout<<pow(kv,2.0)<<"\n";
    }
Добавлено через 1 минуту
По поводу компилятора у меня MVC 2010

Добавлено через 2 минуты
конструктор класса SecondClass вызывает конструктор класса FirstClass
по моему из за этого и не высчитывается элемент класса FirstClass.

Добавлено через 2 минуты
Т.е. сначала передаётся значение для FirstClass вот оно FirstClass F_object(3);
а после печатается его значение вот F_object.show_value();

Добавлено через 20 минут
Вот что у меня получилось:
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
61
62
63
64
65
66
67
#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:
    void Kvadrat ()
    {
        kv = value;
        cout<<pow(kv,2.0)<<"\n";
    }
 
    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();
    S_object.Kvadrat();
 
    //F_object.ValueSqr(); // Как это реализовать?
 
    cout << endl;
    system("pause");
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.12.2016, 19:52
Цитата Сообщение от Maxim09 Посмотреть сообщение
как можно переделать тот пример который привёл я в шапке темы таким образом чтобы квадрат переменной Базового класса тоже выводило?
Нет никакой переменной базового класса.
Если вы создаёте объект производного класса, он уже содержит все "переменные", объявленные в базовом.
Базовый класс не может вызывать методы производного т.к. он ничего про них не знает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.12.2016, 19:52

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru