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

Заменить делегаты функциями обратного вызова - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В файле data.dat хранятся фамилия и годы рождения участников. найти средний возраст участников http://www.cyberforum.ru/cpp-beginners/thread1147999.html
в файле data.dat хранятся фамилия и годы рождения участников. найти средний возраст участников, вывести фамилии тех участников возраст которых наибольший
C++ Ошибки связанные с односвязным списком Здравствуйте... Решила сама разобраться и написать программу, связанную с работой с односвязным списком. Для красоты решила оформить каждое действие(добавление, удаление, печать и ввод, вот только редактирование элемента списка ума не приложу как сделать) в виде структуры... да столкнулась с проблемами... помогите пожалуйста исправить. #include<iostream> #include<conio.h> #include<fstream>... http://www.cyberforum.ru/cpp-beginners/thread1147967.html
Вывод времени со сдвигом на час C++
Есть задача - вывести текущее время и время со сдвигом на час от текущего времени. Вроде бы, все должно быть просто #include <iostream> #include <time.h> using namespace std; int main() {
C++ Исправьте кому не сложно
Здравствуйте, поправьте пожалуйста код кому не сложно компилятор dev c++ 4.9.9.2 #include "iostream" #include <string.h> using namespace std; class Base // bazovyy class soderzhit vse obschie { // polya i methody protected:
C++ Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы http://www.cyberforum.ru/cpp-beginners/thread1147894.html
Удалить из массива, в котором все элементы различны: а) максимальный элемент б) минимальный элемент Добавлено через 4 минуты Основу сделал #include <iostream> #include <vcl.h>
C++ Удалить из односвязного линейного списка определенный узел Построить односвязный список из входной последовательности целых чисел. Написать программу, которая удаляет из линейного списка входной последовательности целых чисел: Узел, содержащий число, равное числу предыдущего узла списка. Выручайте, весь поиск перерыл, ничего толком не нашел) подробнее

Показать сообщение отдельно
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,592
18.04.2014, 18:30     Заменить делегаты функциями обратного вызова
Цитата Сообщение от AceOfSpades Посмотреть сообщение
При чём тут препроцессор?
В С++ не принято использовать препроцессор для таких вещей.

Цитата Сообщение от AceOfSpades Посмотреть сообщение
Объявление null как константы опять же вносит семантику значения...
Чтобы мы тут не написали (хоть define, хоть что), семантика значения всегда будет. Потому что переменная `а` в примере выше - это значение, а не ссылка.

Цитата Сообщение от AceOfSpades Посмотреть сообщение
В общем не буду больше с вами спорить.
Смысл спорить? Я говорю о том, что нельзя просто брать и перекладывать правила написания кода с С# на С++, потому что многие вещи в С++ отличаются.

AceOfSpades, в общем тут понятно, что у вас есть определенные знания С# и С++, но очевидно, что знание С# выше. Поэтому я хочу пояснить насчет значений и ссылок, и проверок на NULL в С++.
Вот для примера такой код на С++. В комментариях объясню чем отличаются эти методы.
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
class A
{
public:
    // Здесь а имеет семантику значения, `а` располагается на стеке и `а` копируется при вызове operator==.
    // Поэтому, в данной ситуации, проверку на NULL делать не 
    // нужно (мы не сможем, даже если захотим, записать ее так, 
    // чтобы сохранить требуемую семантику).`а` - это значение.
    bool operator==(A a) const
    {
        return a.value == value;
    }
    // Здесь `а`, как ни странно, тоже имеет семантику значения, И проверку на NULL делать тоже не нужно. 
    // Ссылка в С++ имеет семантику значения (не может быть NULL -
    // это гарантируется языком).
    // Все операции, производимые над ссылкой, на самом деле будут произведены над объектом, 
    // на который она ссылается. В то же время копирования аргумента не произойдет, 
    // как в первом случае, потому что ссылка также имеет и свойства указателя.
    bool operator==(A const & a) const
    {
        return a.value == value;
    }
    // В этой ситуации мы делаем проверку на NULL, потому что `a` - это указатель. Он может содержать NULL, 
    // но может содержать и адрес реального объекта
    bool operator==(A const * a) const
    {
        return a != NULL && a->value == value;
    }
 
private:
    int value;
};
Как видно, это все несколько отличается от того, что предлагает С#, поэтому не учитывать эти особенности при переносе нельзя.
 
Текущее время: 17:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru