Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Nowsoud
1 / 1 / 0
Регистрация: 01.01.2015
Сообщений: 90

Описание виртуальной функции вне тела класса

27.06.2015, 22:17. Показов 2723. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добра.
Такой вопрос:
Пускай у меня есть абстрактный класс Animal. У него есть виртуальная функция Voice.
Могу ли я для класса Dog как-то описать эту функцию, но в ходе выполнения программы, в зависимости от введённых данных.
(Пример очень условный)
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.06.2015, 22:17
Ответы с готовыми решениями:

Методы - передача параметров и описание вне класса
1. вопрос. Есть класс: class Test { private int m_test; public void Calc(int a) {

Описание тела функии-члена класса
Добрый вечер! Подскажите, если я внутри класса задекларировал функцию void foo(), но нигде не описал её тело, могу ли я создав объект...

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

8
10 / 10 / 8
Регистрация: 13.06.2015
Сообщений: 45
27.06.2015, 23:01
Классика вопросов: Зачем?)
0
.NET C#,ASP.NET MVC
Эксперт .NET
 Аватар для lvlkoo
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
27.06.2015, 23:02
Присоеденяюсь, обьясните задачу, дабы не плодить костыли и велосипеды.
1
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
27.06.2015, 23:12
А какие входные данные могут быть?если другие типы и количества параметров то это перегрузка и никакого отношения к виртуальности функций не имеет.Другой код подсунуть в ран айме никак нельзя.Но если честно не могу придумать ни одного реального и хотя бы более менее адекватного случая когда нечто такое вообще могло бы понадобиться
0
 Аватар для Nowsoud
1 / 1 / 0
Регистрация: 01.01.2015
Сообщений: 90
27.06.2015, 23:28  [ТС]
Ок. Я попробую пояснить на примере конкретной задачи.
Пускай, у нас есть 3 алгоритма шифрования: Чейза, Виженера, AES.

Для каждого из них описан класс, и каждый наследуется от абстрактного класса Algorithm.
У класса Algorithm есть виртуальные ф-ции Encrypt и Decrypt.
Кроме того, будет класс UserAlg, наследуемый от того же Algorithm.

Нужно в процессе работы программы описать UserAlg-у ф-ции Encrypt и Decrypt.
Не в теле класса, иначе это теряет смысл.

Возможно это сделать не возможно.
Может, в таком случае, кто-то сможет подсказать паттерн, который бы описывал модель программы? Что-то вроде Builder. Но Builder, мне кажется, тут не применим.
Спасибо.
0
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
27.06.2015, 23:39
Nowsoud, а почему собственно код внутри тела метода переопределенной функции вдруг теряет смысл?
0
.NET C#,ASP.NET MVC
Эксперт .NET
 Аватар для lvlkoo
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
27.06.2015, 23:54
Тоже не понял смысла. У вас есть абстрактный класс или интрефейс Алгоритм, в которм описаны прототипы функций Зашифровать и Расшифровать. Длаее определяете класс Алгоритм Чейза, который наследуеться от алгоритма, и соотвественно реализует функции шифровки и дешефровки. Класс UserAlg так же наследуемый от Алгоритма сможет реализовать данный метод по своему.
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
28.06.2015, 00:15
Лучший ответ Сообщение было отмечено Nowsoud как решение

Решение

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
68
69
70
namespace ConsoleApplication1
{
    abstract class Algorithm
    {
        abstract public string Encrypt(string text);
        abstract public string Decrypt(string text);
    }
 
    class AES : Algorithm
    {
 
        public override string Encrypt(string text)
        {
            return "IN AES ENCRYPT";
        }
 
        public override string Decrypt(string text)
        {
            return "IN AES DECRYPT";
        }
    }
    class VIG : Algorithm
    {
 
        public override string Encrypt(string text)
        {
            return "IN VIG ENCRYPT";
        }
 
        public override string Decrypt(string text)
        {
            return "IN VIG  DECRYPT";
        }
    }
    class UserAlg : Algorithm
    {
        public delegate string AlgorithmDelegate(string text);
        private AlgorithmDelegate encrypt;
        private AlgorithmDelegate decrypt;
        public UserAlg(AlgorithmDelegate encrypt, AlgorithmDelegate decrypt)
        {
            this.encrypt = encrypt;
            this.decrypt = decrypt;
        }
        public override string Encrypt(string text)
        {
            return encrypt(text);
        }
 
        public override string Decrypt(string text)
        {
            return decrypt(text);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            AES aes = new AES();
            VIG vig = new VIG();
            UserAlg ua = new UserAlg(aes.Encrypt, vig.Decrypt);
            Console.WriteLine(ua.Encrypt(""));
            Console.WriteLine(ua.Decrypt(""));
            UserAlg ua2 = new UserAlg((s) => { return "MY ENCRYPT"; }, (s) => { return "MY DECRYPT"; });
            Console.WriteLine(ua2.Encrypt(""));
            Console.WriteLine(ua2.Decrypt(""));
            Console.ReadKey();
        }
    }
}
1
 Аватар для Nowsoud
1 / 1 / 0
Регистрация: 01.01.2015
Сообщений: 90
28.06.2015, 00:23  [ТС]
Делегат - то, что нужно. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.06.2015, 00:23
Помогаю со студенческими работами здесь

Ошибка "Присваивание имени функции вне тела этой функции" при наличии двух одноименных функций в одном контексте
Данный код: type T = class public function F: integer; begin F := 2; end; function F(x:...

Перекрытие виртуальной функции базового класса
Возникла проблема с перекрытием виртуальной функции базового класса. Изначально все было всё в 1 классе: class S { ... private: ...

Функции вне класса
При создании функции в .cpp функцию которая не связана с классом можно ли создать? или же надо объявить в .h?

Не работает вызов виртуальной функции из класса потомка
Есть код: #include <iostream> #include <vector> #include <list> #include <algorithm> #include <string> #include <sstream> ...

Определение чистой виртуальной функции класса-шаблона
Есть класс Comparable<T>: template<typename T> class Comparable : virtual public Object { public: virtual int compareTo(const T...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru