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

Наследование класс1 *test = new класс2 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ "Завасание" программы, при входе в цикл http://www.cyberforum.ru/cpp-beginners/thread931695.html
Всем доброго времени суток. Пока писал чат на WinSock, столкнулся с такой проблемой: при в ходе в цикл While, программа ( среда - Windows Forms ) как-бы "зависает" - не реагирует на действия пользователя, перестает отрисовывать формы, не реагирует на клавишу "закрыть окно". Вот сам код: using namespace System::Runtime::InteropServices; char * StringToChar(System::String^ string); //...
C++ Игры на C++ Вот мне интерессно, стоит ли учиться создавать игры на С++? Или всё это ерунда и лучше игры создавать на тех же Delphi, WinAPI и т.д.? :) А то я хочу попытаться сделать какую-то игрушку консольную :) http://www.cyberforum.ru/cpp-beginners/thread931685.html
Как объединить пару байт в слово? (Загрузка WAV, Big Endian) C++
Привет! Есть звуковой файл с 16-и битными амплитудами. Да не суть. После открытия файла и чтения всяких заголовков, остаются чистые RAW данные, тоесть байты. Исходя из того, что файл у нас 16-и битный, в этих данных идут нужные мне амплитуда (просто значения) по два байта на каждую. Тоесть идёт последовательность байт: 0,1,2,3,4,5,6,7....и тд здесь первое значение хранится в первых двух байтах,...
C++ Ошибка
Привет всем, пытаюсь сделать конвертер из кг в граммы, у меня тут выдаёт ошибку подчёркнуто слово cout. Прошу, помогите разобраться. #include <iostream> using namespace std; int main () { int kg, grams cout << "Put in the number of kg: ";
C++ Среда разработки http://www.cyberforum.ru/cpp-beginners/thread931654.html
Слышал что вкусы различаются, соответсвенно и среда у многих отличается друг от друга... Простите, в чем разница между такими средами как dev c++, Microsoft visual и builder 5 - 6? Есть ли существенная разница между этими и возможно другими средами? Заметил что компиляторы требуют себе разную начинку и поэтому хочу послушать что об этом думают бывалые программеры.. :)
C++ Создание и подключение заголовочного файла Всем привет! Столкнулся с простой но очень интересной проблемой... Создаю новый проект в MVS2012 (пустой), создаю в нем файл исходного кода, пишу основную программу. Далее создаю в разделе "Заголовочные файлы" пустой файл *.h и пишу в нем определение класса с функциями. После чего инклудю его в исходном коде (мейновском) и пробую компилировать... Вылазеет ошибка, сообщающая что программа не... подробнее

Показать сообщение отдельно
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
01.08.2013, 14:48  [ТС]     Наследование класс1 *test = new класс2
Цитата Сообщение от Jupiter Посмотреть сообщение
перефразируй вопрос
Кликните здесь для просмотра всего текста
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
#include <iostream>
 
class BaseClass // Базовый класс
{
public:
BaseClass() { std::cout << "BaseClass constructor.. \n"; }
virtual ~BaseClass() { std::cout << "BaseClass destructor.. \n"; }
 
void print() const
{ std::cout << "in BaseClass \n"; }
};
  
class DerivedClass : public BaseClass // Производный класс от BaseClass
{
public:
DerivedClass() { std::cout << "DerivedClass constructor.. \n"; }
virtual ~DerivedClass() { std::cout << "DerivedClass destructor.. \n"; }
 
void print() const
{ std::cout << "in DerivedClass \n"; }
};
  
int main()
{
setlocale(LC_ALL,"");
 
BaseClass *test = new DerivedClass;
test->print();
 
system("pause");
return 0;
}


Вот пример, тоже что приводилось на предыдущей странице ранее, толь без использование virtual (разве что деструктор, но он погоды тут не делает), мы создаем объект test, он является объектом класса DerivedClass (опустим тот момент, что это не объект, а указатель на объект), соответственно в обоих классах есть одна и та же функция-элемент - print()

По логике, если объект test относится к классу DerivedClass, то и функция элемент print() должна вызываться из этого класса, но на деле происходит обратное..

Тогда мы меняем логику, если есть 2 класса, один является наследником другого, и в обоих присутствует одна и та же по наименованию функция-элемент, то при обращении к ней если не указано явно, к какой именно, программа \ компилятор, всегда будет обращаться к функции элементу базового класса, правильно?

И второе, что бы указать явно программе \ компилятору к чему именно обращаться, существует ключевое слово virtual, если оно присутствует, то программа будет обращаться НЕ к базовому классу, а к производному классу (речь пока идет 2-х классах), правильно?
 
Текущее время: 19:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru