Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/2345: Рейтинг темы: голосов - 2345, средняя оценка - 4.54
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Задачи для тренировки и лучшего понимания

15.07.2010, 05:53. Показов 502800. Ответов 1272
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят. Кто-нибудь может дать задачу для тренировки? Приблизительно по всему курсу С++. Буду благодарен за сложную задачу, но которую способен сделать новичок-любитель. Затраты сил-времени не важно. Главное, чтобы это было интересно и не слишком рутинно. + Если найдется человек который даст задачу просьба помогать с кодом, который я буду себя скидывать. Не переписывать за меня, но указывать на ошибки и желательно объяснять. Заранее спасибо.

Список задач, решение которых присутствует в данной теме:
44
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2010, 05:53
Ответы с готовыми решениями:

Элементарные программы, для лучшего понимания языка...
Здравствуйте. Вот сегодня решил что пора изучать с++. Есть пару задач. Начал решать и уже на первой запоролся( суть в том чтобы определить...

Задачи для тренировки и лучшего понимания языка
Предлагаю в этой теме размещать задачи, которые помогут новичкам (и не только) более детально разобраться в основах языка. При размещении...

Литература для лучшего понимания сути программирования
Привет! Подскажите литературу, которая поможет разобраться в сути самого процесса программирования, поможет изучить теорию алгоритмов,...

1272
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
17.11.2010, 21:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ForEveR Посмотреть сообщение
rangerx,
мб?
Пронаследовать его от абстрактного класса, не переопределяя чисто виртуальную функцию базового класса
Не вариант
Подклассов не должно волновать то, что их не касается, абстрактность в данном случае - заморочка только данного класса.
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
17.11.2010, 21:25
Цитата Сообщение от ForEveR Посмотреть сообщение
rangerx, мб?
Собственно CyBOSSeR уже ответил
Цитата Сообщение от Kastaneda Посмотреть сообщение
rangerx, или так?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 00:12  [ТС]
Кстати. Не уверен. НО. Можно-ли так?

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
class Class abstract
{
};
 
int main()
{
    Class Ob;
}
Компилирует и не позволяет создать объект абстрактного класса.
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
18.11.2010, 00:17
Этого ключевого слова вроде как нет в стандарте. Но VS поддерживает его. Действует вроде так же как в джаве и сишарпе, очень даже удобно получается.
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
18.11.2010, 00:28
Цитата Сообщение от ForEveR Посмотреть сообщение
Можно-ли так?
Нет. Это что-то из С++/CLI, а не из С++.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 00:56  [ТС]
Код из области идиотизма. И все же. Что нужно добавить, чтобы это скомпилировалось?

C++
1
2
3
4
5
6
7
8
9
template<class T>
class Class
{
public:
    virtual ~Class()=T;
    void foo(T a)
    {
    }
};
Добавлено через 11 минут
Есть как минимум два решения. Больше пока не нашел
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
18.11.2010, 00:59
У конструктора должено быть тело
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename T>
class Class
{
    public:
        virtual ~Class() = 0;
        void foo(T a)
        {
        }
};
 
template<typename T>
Class<T>::~Class()
{
}
вообще "=0" просто указывает, компилятору, что класс должен рассматриваться как абстрактный, но это не означает, что у такой функции не может быть тела.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 01:17  [ТС]
rangerx, Вопрос был именно про тот код. И про ноль там ничего не было.
Кстати. Он и в том виде, что я привел компилируется. Но все же вопрос не снимаю.

Добавлено через 16 минут
Отбой. Такое компилится только в студии. Поэтому задачке нужно решение. Одно решение. Ибо на второе на нормальных компилях ругается.
А студии хоть =100500 напиши - скомпилит.
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
18.11.2010, 01:30
Прикольно, вот такое тоже вполне компилится.
C++
1
2
3
4
5
6
7
8
9
10
11
template<typename T>
class Class
{
    public:
        virtual ~Class() = бу гога;
        void foo(T a)
        {
            тыц тыц;
            трам парарам парарам!
        }        
};
Видимо студия вообще очень непривередлива к описанию шаблонного класса, пока не потребуется создать конкретную версию.
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 01:31  [ТС]
Хохол, Жесть. Это ужас)
0
18.11.2010, 13:21

Не по теме:

Я наоборот думал, что студия очень привередливая (в коде, который DEV_C++ компилит с легкостью, студия найдет 50 ошибок), а на деле вон оно что:)

0
Заблокирован
18.11.2010, 14:01
Цитата Сообщение от rangerx Посмотреть сообщение
Допустим есть некий класс Object
C++
1
2
3
4
5
class Object
{
    public:
        ...
};
этот класс необходимо сделать абстрактным, но ни одной подходящей для этого функции, чтобы сделать её чисто виртуальной, нет. Что делать в таком случае?
Сделай конструктор защищённым. Очевидно же.

C++
1
2
3
4
5
class Object
{
protected:
    Object() { }
};
Цитата Сообщение от ForEveR Посмотреть сообщение
rangerx,
мб?
Пронаследовать его от абстрактного класса, не переопределяя чисто виртуальную функцию базового класса
Бред.

Цитата Сообщение от Kastaneda Посмотреть сообщение
rangerx,
или так?
Чисто виртуальный деструктор
Бред.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
18.11.2010, 14:06

Не по теме:

Kastaneda, MSVS только параноидально предупреждает об использовании якобы небезопасных функций и предлогает воспользоваться мелкомягкими аналогами наподобие strcpy_s, strncat_s и другими *_s.
gcc, ИМХО, в этом плане куда более надежен.



Добавлено через 4 минуты
Цитата Сообщение от NightmareZ Посмотреть сообщение
Сделай конструктор защищённым. Очевидно же.
А это разве не бред? В таком случае любой производный класс сможет создавать объекты родительского, где здесь абстрактность?
0
Заблокирован
18.11.2010, 14:19
Цитата Сообщение от fasked Посмотреть сообщение
А это разве не бред? В таком случае любой производный класс сможет создавать объекты родительского, где здесь абстрактность?
Это лучшее решение. Ибо не плодит всякой фигни и решает задачу: никто левый не сможет создать класс без лиших телодвижений. А коли сможет - ССЗБ.

В случае "правильной" абстрактности (как, например, в C#), тоже можно создать объект (почти) этого класса. Достаточно унаследоваться от класса и в потомке ничего не добавлять, создать экземпляр потомка и привести к типу родителя.

Наверное, мне сразу стоило сказать, что сама постановка задачи бредовая, ибо такой класс вообще абстрактным делать смысла нет.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.11.2010, 14:26  [ТС]
Товарищи, мою задачу кто-нибудь собирается решать?)
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
18.11.2010, 15:23
Цитата Сообщение от NightmareZ Посмотреть сообщение
Бред.
Чисто виртуальный деструктор

При попытке объявить деструктор чисто виртуальным, компилятор будет справедливо ругаться на то, что у деструктора не объявлено тело. Правильно, ведь наследники вызвают деструктор родителя, а если тела у родительского деструктора нет, то и вызывать нечего. Поэтому деструктору нужно написать тело. Да, у чисто виртуальных функций могут быть объявлены тела. Обычно это никто не делает, потому что это не нужно. Итак, в итоге получается абстрактный базовый класс, при наследовании от которого деструкторы будут виртуальными. Это удобно, если в базовом классе нет других чисто виртуальных функций.
И в чем тут бред?
1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
18.11.2010, 15:53
NightmareZ, уже такое поведение нарушает свойства абстрактности как таковой.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class Protected {
        public:
                virtual ~Protected();
 
                static Protected Create() {
                        return Protected();
                }
 
        protected:
                Protected() {
                }
};
 
Protected::~Protected() {
}
 
int main() {
        Protected p = Protected::Create();
        return 0;
}
А чисто виртуальный деструктор решает ситуацию правильно:
C++
1
virtual ~Protected() = 0;
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
main.c:7:20: error: invalid abstract return type for function ‘static Protected Protected::Create()’
main.c:3:17: note:   because the following virtual functions are pure within ‘Protected’:
main.c:5:11: note:      virtual Protected::~Protected()
main.c: In static member function ‘static Protected Protected::Create()’:
main.c:7:20: error: invalid abstract return type for function ‘static Protected Protected::Create()’
main.c:3:17: note:   since type ‘Protected’ has pure virtual functions
main.c:8:21: error: cannot allocate an object of abstract type ‘Protected’
main.c:3:17: note:   since type ‘Protected’ has pure virtual functions
main.c: In function ‘int main()’:
main.c:20:34: error: cannot allocate an object of abstract type ‘Protected’
main.c:3:17: note:   since type ‘Protected’ has pure virtual functions
main.c:20:34: error: cannot allocate an object of abstract type ‘Protected’
main.c:3:17: note:   since type ‘Protected’ has pure virtual functions
main.c:20:12: error: cannot declare variable ‘p’ to be of abstract type ‘Protected’
main.c:3:17: note:   since type ‘Protected’ has pure virtual functions
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.11.2010, 23:59  [ТС]
Что нужно добавить, чтобы этот код скомпилировался на любом компиляторе, поддерживающем шаблоны?

C++
1
2
3
4
5
6
7
8
9
template<class T>
class Class
{
public:
        virtual ~Class()=T;
        void foo(T a)
        {
        }
};
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
20.11.2010, 11:29
Наткнулся на такое:
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
volatile const char *p = "0";
int main()
{
        std::cout << p << std::endl;
        return 0;
}
Что выведется на экран и почему?
0
Заблокирован
20.11.2010, 11:57
Цитата Сообщение от fasked Посмотреть сообщение
Наткнулся на такое:
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
volatile const char *p = "0";
int main()
{
        std::cout << p << std::endl;
        return 0;
}
Что выведется на экран и почему?
Выведется единица скорее всего. Оператор << перегружен для const char*, но не для volatile const char*, потому компилятор кастует к чему может, а может в данном случае к bool. А так как указатель ненулевой, то расценивается как true, а полученный bool уже выводится в виде числового значения.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.11.2010, 11:57
Помогаю со студенческими работами здесь

Набор задачь для тренировки и улучшения понимания программирования
Добрый вечер всем. Если кто знает модскажите где можно найти подобный набор задачь...

Проверить на правильность и закомментировать весь код для лучшего понимания
Всем здравствуйте. Условие задачи - Заданная матрица целых чисел размером (N, N). Найти среднее арифметическое элементов в окрашенной...

Нужны задачи для тренировки
Киньте задачки на классы......а то в самоучителе, по которому я учу Сишку....приведены задачки, касающиеся только математики.....сами...

Нужны задачи для тренировки
Здравствуйте киньте пожалуйста задания по с++ для человека начинающего изучать Turbo с++

Нужны задачи для тренировки
Вот не давно был школьный этап по программирование в школе(олимпиады). Меня закинули на городскую, вот только писал ту олимпиаду на...


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

Или воспользуйтесь поиском по форуму:
920
Закрытая тема Создать тему
Новые блоги и статьи
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