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

Указатель на объект базового класса и адрес объекта производного класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Если в массиве есть хоть 1 отрицательное число, то программа должна печатать max, а если нет - то 0 http://www.cyberforum.ru/cpp-beginners/thread1302549.html
Дано массив... если в массиве есть хоть 1 отрицательное число то программа должна печатать max, а если нет то 0; ну я здесь написал кое что... можете исправить на моем коде? #include "stdafx.h" #include <iostream> using namespace std; int GtnelMax(int ,int ); void TpelMassiv(int ,int ); bool BacasakanTarrKa (int ,int ); void ;
C++ Составление чисел из цифр числа Пусть дано число N. Надо перебрать всевозможные числа, которые можно составить из его цифр. Помогите пожалуйста! http://www.cyberforum.ru/cpp-beginners/thread1302547.html
C++ Создать вектор X из положительных элементов вектора A
Если кому не сложно-:help: Создать вектор x={xk} из положительных элементов вектора a={an}.
C++ Определить среднее геометрическое крупнейшего по модулю и наименьшего по модулю элементов двумерного массива
Определить среднее геометрическое крупнейшего по модулю и наименьшего по модулю элементов двумерного массива.
C++ Литература по алгоритмам http://www.cyberforum.ru/cpp-beginners/thread1302522.html
возникло желание изучить и писать алгоритмы(так как я чайник).посоветуйте какую-нибудь литературу только на С/C++. Добавлено через 2 минуты хотелось бы научиться решать какие-нибудь задачки....
C++ Вычислить в зависимости от условия (switch) что то затупил, никак не могу понять как сделать, на самом деле мне очень интересно, заранее спасибо за помощь! 3. Решить, используя оператор switch: Ввести переменные х, у, z (x-целое, у - вещественное, z-вещественное) . Если х<0, то z=(x-5)*y; y=(z+63)*x; z=y*x; если 0=<x<10, то z=x*y-5; y=х-10+y; подробнее

Показать сообщение отдельно
Abdullah
0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 1

Указатель на объект базового класса и адрес объекта производного класса - C++

16.11.2014, 23:24. Просмотров 636. Ответов 1
Метки (Все метки)

Пример кода:
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
class Class1
{
public:
    Class1(int x) {
        j = new int;
        *j = x;
    }
    ~Class1() {delete j;}
    int* j;
};
 
class derClass1 : public Class1
{
public:
    derClass1(int y) : Class1(4) {
        k = new int;
        *k = y;
    }
    ~derClass1() {delete k;}
    int* k;
};
 
void main()
{
    Class1* a = new Class1(2);
    Class1* b = new derClass1(7);
    delete a;
    delete b;
}
1. Оператор new возвращает адрес на инициализированный объект класса derClass1. Этот адрес мы присваиваем указателю на объект другого, базового, класса (строка 26). Тут происходит какое-то приведение типов указателей, которое мне не понятно. Может ли кто-нибудь прояснить суть процесса?
Что интересно, если описать производный класс в таком виде:
class derClass1 : private Class1,
то приведение типов не срабатывает и присвоение невозможно.

2. Применяется ли такое приведение типов указателей на практике? Где это может понадобиться?

3. Правильно ли я понял, что при выполнении delete b область памяти, выделенная под k, останется неосвобожденной? Ведь указатель b после приведения указывает на объект базового класса, у которого нет полей и методов производного класса, хотя при операции new derClass1 память выделялась также и под k.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru