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

Накопились вопросы по разным темам. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передача переменных в поток http://www.cyberforum.ru/cpp-beginners/thread347278.html
Вот никак не могу разобраться, как передать переменную в функцию потока. Вот например есть код: DWORD WINAPI Ms(LPVOID pr) { MessageBox(NULL, "Hello", "Hello", MB_OK); return 0; } int main() {
C++ Контейнер на пободия hash_map. Всем привет. Столкнулся с такой задачей, нужно написать собственный контейнер на подобие hash_map. Почитал Страуструпа, некоторые моменты понятны по созданию контейнеров. Но для меня остается загадкой: 1) работа аллокатора. (хотя как я думаю для меня он все равно будет закрытым ящиком) 2) способ добавления элементов. (как я понимаю по структуре очень похоже на двустороннюю очередь) Если... http://www.cyberforum.ru/cpp-beginners/thread347277.html
Notepad++ и C++ C++
Подскажите, пожалуйста, как связать Notepad++ с компилятором Borland C++? Кто-то говорил, что можно, но не говорил как...
C++ коментарии к прогам..
Помогите пожалуйста расскоментировать подробней программы: #include <stdio.h> #include <stdlib.h> #include <iostream> #include <graphics.h> #include <conio.h> #include <math.h> using namespace std;
C++ Отсортировать массив с помощью сортировки методом вставки http://www.cyberforum.ru/cpp-beginners/thread347238.html
Подскажите код,есть такая задачка...Дан двумерный массив заполненый с помощью генератора случайных чисел, отсортировать массив с помощью сортировки методом вставки!!!помогите плз!
C++ Исходники виртуальной машины Здравствуйте! ни у кого случаем нет исходников какой либо виртуальной машины? очень нужно.. хотя бы самый простой.. чтобы около 50 команд подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.09.2011, 21:56
Поскольку ответы тут разрозненные, попробую собрать всё воедино. Собирать буду не в буквальном смысле, отвечать буду сам, поэтому если повторюсь, извините)) Начинаем.

Цитата Сообщение от Chelioss Посмотреть сообщение
1) операция :: - это операция разрешения области действия или области видимости?
Называют и так, и так. Оригинальное название - scope, дословный перевод (гугл) - область действия, область видимости. Так что, действительно, и так, и сяк))

Цитата Сообщение от Chelioss Посмотреть сообщение
2) Чем отличается структура от класса? У структуры и у класса есть данные и функции. Да, у классов есть наследование, полиморфизм, инкапсуляция и т.д и т.п.. Это все?
Судя по моим малым знаниям, мне кажется, что структуру всегда можно заменить классом. Что такого есть в структуре, что нет у класса?
Как уже сказали, структура от класса отличается только тем, что по умолчанию в ней все члены - public, тогда как в классе - private. Всё, больше никаких различий. Структуры в С++ оставили для совместимости с тоннами кода, написанного на С. Ключевое слово class добавили по идеологическим соображениям, всё-таки на ООП замахнулись, а там без термина "класс" скучновато))

Цитата Сообщение от Chelioss Посмотреть сообщение
В объекте класса( в представителе класса ) есть указатель this, указывающий на этот объект.
Методы класса получают неявно этот указатель.
Допустим есть метод:
C++
1
void fun();
Тогда если раскрыть эту "неявность", то получится это?
C++
1
void fun( SomeClass *this );
А если есть метод:
C++
1
void fun1( int );
То будет так?
C++
1
void fun1( SomeClass *this, int );
Если все правильно я сказал, то можно передавать методам явно указатель, т.е
C++
1
void fun( SomeClass *this );
и
C++
1
void fun1( SomeClass *this, int );
?
В объекте класса нет указателя this. Метод при вызове получает указатель на член класса, для объекта которого его вызвали. Как преобразует компилятор вызов метода (ставит указатель на объект в начале, в конце или как ещё) - дело компилятора (насколько мне известно, в стандарте про это не написано. Если ошибаюсь - прошу поправить). Однако явно объявлять метод с таким "дополнительным" параметром и явно передавать указатель на объект в метод - ошибка, так как компилятор всё равно сам попытается передать скрытый параметр, а в этом случае произойдёт ошибка компиляции, поскольку компилятор не сможет найти метод с такой сигнатурой, как его пытаются вызвать (с одним неявным параметром и одним явным, который лишний).

Цитата Сообщение от Chelioss Посмотреть сообщение
4)Указатель this находится в объекте, тогда
допустим есть класс
C++
1
2
3
4
5
class SomeClass
{
public: int a;
private: int b;
};
тогда если раскрыть всю "неявность" указателя this, то будет так?
допустим есть класс
C++
1
2
3
4
5
6
class SomeClass
{
public: int a;
private: int b;
 const SomeClass *this;
};
Нет, как я уже сказал, класс не хранит указатель на себя, какой смысл? Вызов
C++
1
some_class.some_method();
будет преобразован в
C++
1
some_method(&some_class);
Как видно, адрес получить проще простого, так зачем его ещё и хранить?

Цитата Сообщение от Chelioss Посмотреть сообщение
5) Для того, чтобы использовать объекты cout,cin, надо "использовать пространство имен std"
Я знаю три способа:
- using namespace std; // самый простой
- using std::cout; using std::cin;
- непосредственно писать во всем коде перед cout и cin std::, т.е.
std::cin >> a;
std::cout << a;
Какой из способов лучше?
На этот счёт существуют тонны холиваров. Мой аргумент против первого способа: пространства имён вводили не за тем, чтобы в первых 3-5 строках программы любой желающий мог отменить его.
Против второго способа в принципе ничего не имею, но и он может оказаться источником ошибок, когда используются несколько библиотек, и хотя бы в двух из них есть классы с одинаковыми именами. Если в одном заголовочном файле мы отменим пространство имён объекта из одной либы, а в другом файле - из другой, и подключим оба заголовка к одному модулю - код не скомпилируется.
Лично я всегда использую третий способ, каким бы обширным не был проект.

Цитата Сообщение от Chelioss Посмотреть сообщение
6)Инкапсуляция - это всего лишь скрытие реализации класса от клиентов, т.е. программистов, использующих этот класс? Скрытие реализации для того, что бы код клиентов не зависил от реализации, т.е. они должны знать только интерфейс класса(какие есть методы и что они делают)?
Да.

Цитата Сообщение от Chelioss Посмотреть сообщение
7) Функции в классах называют методами или по другому члены-функции.
Я читаю Дейтелов "Как программировать на С++".
В книгу везде пишут элемент данные и элементы функции, вместо членов класса и методов(членов функций). Может это корявый перевод на русский?
Просто такие термины я вижу только в этой книге.
В ООП (в отрыве от языков) это называют "поля" и "методы". В С++ часто применяются термины "члены-данные" и "члены-функции".
Member с английского можно перевести и как "член", и как "элемент", и ещё много как. Поэтому это не корявый перевод, а скорее просто ещё не до конца сформировавшаяся терминология в русском языке.

Вот так))
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru