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

Разница между виртуальным и простым методом - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Движение двух фигур в разных потоках http://www.cyberforum.ru/cpp-beginners/thread1062081.html
Привет всем!всех с новым годом!и снова я к вам с моими проблемами) короче пишу игрушку в консоле,столкнулся впервые с многопоточностью)использую стандартную библиотеку c++ <thread> для создания потоков и работы с ними.так же использую инициализацию графики в консоли с помощью библиотеки msoftcon.h. Все бы хорошо,но есть одна проблема...как выразиться лучше то...мне нужно чтобы две фигуры на...
C++ Ошибка доступа после fclose Всем привет. Использую в проекте запись в бинарный файл с помощью функций fwrite, fopen, fclose. Иногда (примерно каждый 10-20 файл), происходит ошибка доступа к файлу, т.е. "файл используется другим приложением" (т.е. моим), при этом в консоли я вижу, что fclose выполнена успешно. В чем может быть проблема? Программа многопоточная, имя файла передается в другой поток, после успешного fclose, но... http://www.cyberforum.ru/cpp-beginners/thread1062077.html
C++ Бугсую. Нужен свежий взгляд
Этот кусок проги (по задумке) ищет в тексте различные скобки, да только дальше первой не идет, гляньте в чем косяк, уверен проблема ерундовая. Спасибо заранее!!! #include <conio.h> #include <stdio.h> #include <math.h> #include <ctype.h> #include <locale.h>
Reverse класса C++
С новым годом друзья! Реверсю один exe, больше половины востановил (благо написана она на Qt и сюдя по всему скомпилированна в том же компиляторе что и у меня, т.к декорирование импорта из dll_ок даже совпадает :) ) Но есть кусок проблемного для меня дизассемблерного кода в самом начале который я временно отбросил, но дальше без него уже никак: .text:0040C660 ; int __stdcall...
C++ Создание и обработка матрицы http://www.cyberforum.ru/cpp-beginners/thread1062036.html
Здравствуйте, я начинающий в программировании и в С++ в частности, вот столкнулся с проблемой, мне надо задать матрицу, выделить все элементы над главной диагональю и из них выбрать наибольшие по значению, записать их индексы в отдельный массив, где в одной строке будут индексы строк, в другой индесксы столпцов этих элементов. Я не прошу от вас сделать всё за меня, но у меня даже не получается...
 

Показать сообщение отдельно
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
03.01.2014, 02:59  [ТС]     Разница между виртуальным и простым методом
MrGluck, alsav22, большое Вам спасибо!
Я немного уже начинаю конечно понимать, однако, не совсем уверен, что правильно...
Поправьте пожалуйста, если я не прав:
Как я понимаю, при наследовании классом one класса two, мы просто получаем указатель на сам экземпляр класса one в класс two, и ссылки на методы у нас переопределить-невозможно. Однако, при использовании virtual метода, изменении ссылки допускается, и теперь, при использовании указателя на класс, мы получаем не ссылку на метод первого класса, а ссылку на метод второго класса(иными словами-при использовании указателей, методы fun_1 и fun_2, без использования virtual, мы бы вызывали методы из экземпляра класса one, т.е. они не были бы переопределены, а при использовании virtual, в случае, если в классе two есть метод fun_1, то впервую очередь, будет вызван именно метод fun_1 из второго класса, т.е. ссылка будет указывать не на метод первого класса, а на метод второго класса)...
Ну, я так это вижу... Может-неправильно(да, и скорее всего, так и есть), но, я так понял понял, читая информацию с различных источников...

Добавлено через 6 минут
Я вот только одного не могу понять:
Вот мы объявляем ссылку на класс one, для примера, и присваиваем её адресу на класс one(переменная Х, для примера, являющаяся переменной типа нашего класса).
Мы её используем, как ни в чём не бывало, однако, когда мы присваиваем ссылку на класс one адресу на класс two, компилятор не ругается, хотя, казалось бы, это разные классы, и это ошибка...
Я конечно подозреваю, что это связано с наследованием класса two класса one, однако, я не могу понять толком, по какой причине, указатель на класс one спокойно видит адрес на класс two...
Если можно-объясните пожалуйста...

Добавлено через 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
30
31
32
33
34
35
36
37
38
#include "stdafx.h"
#include <stdio.h>
 
class one
{
    public: virtual void fun_1(void) { printf("one::fun_1()\n"); };
    public:         void fun_2(void) { printf("one::fun_2()\n"); };
 
class two : public one
{
    public: virtual void fun_1(void) { printf("two::fun_1()\n"); };
    public:         void fun_2(void) { printf("two::fun_2()\n"); };
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    one x;
    two y;
    one* pointer=&x;
    printf("===\nORIGINAL FUNCTIONS:\n===\n");
    printf("CLASS_ONE:\n");
    x.fun_1();
    x.fun_2();
    printf("CLASS_TWO:\n");
    y.fun_1();
    y.fun_2();
    printf("===\nPOINTER FUNCTIONS:\n===\n");
    printf("CLASS_ONE:\n");
    pointer->fun_1();
    pointer->fun_2();
    printf("CLASS_TWO:\n");
    pointer=&y;
    pointer->fun_1();
    pointer->fun_2();
    _gettch();
    delete pointer;
    return 0;
}
 
Текущее время: 07:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru