Форум программистов, компьютерный форум 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, 00:17     Разница между виртуальным и простым методом
Здравствуйте!
Подскажите пожалуйста...
Я прочитал про виртуальные методы в классах, и, как было описано, что виртуальные методы служат для того, чтобы можно было переопределить функцию(метод) из класса наследника(допустим, есть класс one, в нём есть функция fun_1, она возвращает(просто возвращает) int 1992, и есть класс two, который является наследником класса one, в нём переопределяем функцию, дабы она вернула значение уже 24, функция fun_1 подписана, как виртуальная, так же есть функция fun_2, она, так же, как и fun_1, просто возвращает число, только 2014, а её переопределение в классе two возвращает 15).
После всех переопределений, когда я запускаю программу, дабы увидеть результат и разницу между виртуальным и простым методом... Разницы-нету. Переопределились оба метода, и с virtual, и без virtual... Смотрел в примере, взятым из Википедии, по описанию примера-всё правильно, однако, вот такой результат...
Вот код:
Кликните здесь для просмотра всего текста

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
#include "stdafx.h"
#include <stdio.h>
 
class one
{
    public: virtual int fun_1(void) { return 1992; };
    public:         int fun_2(void) { return 2014; };
};
 
class two : public one
{
    public: virtual int fun_1(void) { return 24; };
    public:         int fun_2(void) { return 15; };
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    one x;
    two y;
    printf("CLASS_ONE:\n");
    printf("%d\n", x.fun_1());
    printf("%d\n", x.fun_2());
    printf("CLASS_TWO:\n");
    printf("%d\n", y.fun_1());
    printf("%d\n", y.fun_2());
    _gettch();
    return 0;
}

Подскажите пожалуйста, что я делаю не так... И раз оба метода у меня переопределились-в чём тогда вообще смысл виртуальных методов(если не затруднит)?
Вот ещё, ради интереса сделал для себя другой пример, полностью повторяющий пример из Википедии, только их пример, почему то и в правду, не переопределяет не виртуальный метод, в отличии от моего...
Кликните здесь для просмотра всего текста

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
#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* _one=new one;
    two* _two=new two;
    _one->fun_1();
    _one->fun_2();
    _two->fun_1();
    _two->fun_2();
    _gettch();
    delete _one;
    delete _two;
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru