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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

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

01.09.2011, 20:38. Просмотров 1177. Ответов 21
Метки нет (Все метки)

1) операция :: - это операция разрешения области действия или области видимости?
2) Чем отличается структура от класса? У структуры и у класса есть данные и функции. Да, у классов есть наследование, полиморфизм, инкапсуляция и т.д и т.п.. Это все?
Судя по моим малым знаниям, мне кажется, что структуру всегда можно заменить классом. Что такого есть в структуре, что нет у класса?
3) В объекте класса( в представителе класса ) есть указатель 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 );
?
4)Указатель this находится в объекте, тогда
допустим есть класс
C++
1
2
3
4
5
class SomeClass
{
public: int a;
private: int b;
};
тогда если раскрыть всю "неявность" указателя this, то будет так?
C++
1
2
3
4
5
6
7
допустим есть класс
class SomeClass
{
public: int a;
private: int b;
           const SomeClass *this;
};
5) Для того, чтобы использовать объекты cout,cin, надо "использовать пространство имен std"
Я знаю три способа:
- using namespace std; // самый простой
- using std::cout; using std::cin;
- непосредственно писать во всем коде перед cout и cin std::, т.е.
std::cin >> a;
std::cout << a;
Какой из способов лучше?

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

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

PS Что еще вспомню, допишу.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2011, 20:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Накопились вопросы по разным темам. (C++):

Найти информацию по темам: - C++
По таким темам: информатика 1. Решение задач с простой переменной на языке C + +. 2. Применение циклов, условных операторов. ...

Информация по темам билетов - C++
Всем доброго времени суток. Готовлюсь к сессии, все шло хорошо, но тут увидел несколько билетов которые мне не знакомы и более того, ищу...

Несколько программ по разным темам - Pascal
Помогите решить несколько задач (мне нужно очень срочно один не справлюсь) повательность A1,A2,..,An состои из нулaей и единиц....

Тест,примеры по разным темам - Математика
Тот,кто зальет решение будет большой молодец. Задание на форум в текстовом формате.

Написать 20 слов разным цветом с разным расположением - Turbo Pascal
Нужно в паскале написать 20 слов например cyberforum что бы это слово было разным цветом + слова должны быть в произвольном расположении....

Когда вопросы кончаются, сделать кнопку неактивной и вывести сообщение о том, что вопросы кончились - Программирование Android
Кто знает ребят подскажите в чем проблема, есть метод обновляющий текст в TextView (всего 6 вопросов). Так вот когда вопросы кончаются...

21
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
02.09.2011, 19:26 #16
Chelioss, нет, только данные класса.
1
LosAngeles
Заблокирован
02.09.2011, 19:38 #17
Цитата Сообщение от Chelioss Посмотреть сообщение
Модификатор const у методов означает, что нельзя модифицировать только данные класса?
mutable данные изменять можно. Так к сведенью, не рекомендация применять его
1
Alex1234
13 / 13 / 0
Регистрация: 11.02.2011
Сообщений: 55
02.09.2011, 19:49 #18
Если голова способна принять еще информации, обрати внимание на следующие:
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
class A
{
    int x;
    int *y;
    int &z;
    mutable int m;
public:
    A(): z(x)
    {
        y = new int;
    }
 
    ~A()
    {
        delete y;
    }
 
    void func() const
    {
        //x = 5;  //Низя!
        *y = 5;   //Можно
        z = 5;    //Тоже можно
        m = 5;    //Само собой можно
    }
};
1
Сыроежка
Заблокирован
02.09.2011, 20:42 #19
Цитата Сообщение от Chelioss Посмотреть сообщение
Все равно не понимаю почему в языке С++ существуют и структуры и классы. Тем более, если оказывается, что и у структур есть наследование, полиморфизм и т.д. и т.п.

Это все основные различия?

Вот еще вопрос:
В книге Дейтейлов "Как программировать на С++" в классе сперва пишут public, потом protected, потом private. А вот на этом форуме наоборот. Как правильно то?
Чтобы было понятно, то надо обратиться к истории языка С++. Он базируется на языке С. В С, как известно, никаких классов нет. Поэтому для реализации классов в С++ в первых версиях использовались структуры. А слово "class" было всего лишь макрокомандой. То есть такого ключевого слова в первых версиях С++ не было. То есть сначала язык С++ был просто препроцессором для С.
Как известно, объектно-ориентированное программирование строится на принципе закрытости реализации. Поэтому по умолчанию у классов их члены имеют спецификатор доступа private. У структур такого нет, так как не забывайте, что нужно обеспечить совместимость с языком С, откуда в С++ пришли структуры. То есть имеет место некоторый дуализм, связаггый с тем, что С++ строится на основе С. С++ должен поддерживать стандартные структуры языка С, а также наделять их новыми качествами. Классы на самом деле также физически реализованы в виде структур.

Что касается спецификаторов доступа, то их можно размещать в любом порядке и в любом количестве. Единственное, чем руководствуются, это читабельностью кода.

Добавлено через 3 минуты
Цитата Сообщение от Overmind024 Посмотреть сообщение
Первый способ следует использовать только в начале изучения языка.
А вот дальнейший выбор зависит от размера программы. Для большой программы лучше использовать второй, а для маленькой третий
Нет, никакого дальнейшего выбора не существует кроме использования квалифицированных имен. Так как если вы используете директиву using SomeName, то вы 1) скрываете такое же имя, которое может быть вам нужно в коде; 2) способствуете возникновению конфликта имен, так как ваше SomeName может заменить другое SomeName, запрятанное где-нибудь далеко в реализации.

Добавлено через 3 минуты
Цитата Сообщение от Chelioss Посмотреть сообщение
И все? Т.е., например, я могу взять простенький класс и вместо class написать struct, при этом помня про различие класса и структуры?

А какой смысл тогда было делать Страуструпу классы, если можно было всего лишь одной свойство в структурах изменить и было бы как классы?
Страуструп не мог изменить одно свойство, так как, как я уже сказал, его первый "компилятор" был просто препроцессором над С. В то время структуры не имели таких свойств класса, как сейчас. Поэтому ему нужно было как-то различать стандартные структуры языка С и свои нововведения, которые он наделял новыми свойствами, чтобы другие программисты не путались.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
02.09.2011, 20:43  [ТС] #20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Что касается спецификаторов доступа, то их можно размещать в любом порядке и в любом количестве. Единственное, чем руководствуются, это читабельностью кода.
Я читабельность кода и имел ввиду. Везде, где я видел, сперва пишут private, потом protected, дальше public. В книге наоборот.
В плане читабельности какой вариант лучше?
0
Сыроежка
Заблокирован
02.09.2011, 20:47 #21
Цитата Сообщение от Chelioss Посмотреть сообщение
Я читабельность кода и имел ввиду. Везде, где я видел, сперва пишут private, потом protected, дальше public. В книге наоборот.
В плане читабельности какой вариант лучше?
На вкус и цвет товарищей нет.

Каждый сам для себя решает. Лично я вначале всегда объявляю public методы. Это проще, так как пользователю вашего класса в первую очередь нужно видеть объявления конструкторов и других открытых методов. Реализация его может интересовать лишь в последнюю очередь. А так как люди обычно читают сверху вниз, то и распологать на мой взгляд public методы лучше сверху, то есть в начале.
1
Alex1234
13 / 13 / 0
Регистрация: 11.02.2011
Сообщений: 55
02.09.2011, 20:49 #22
1) Как тебе нравится.
2) Каким Style Guide ты пользуешься.
1
02.09.2011, 20:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2011, 20:49
Привет! Вот еще темы с ответами:

Тесты по данным темам - Информатика
Добрый день, помогите, пожалуйста, подобрать тесты по темам, ниже я предоставлю!Может у кого в наличии есть или кто нашел где-нибудь, а то...

Как осуществить поиск по темам - Visual Basic .NET
Как осуществить поиск тем

MS Access Реализация тестов по просмотренным темам - C++ Builder БД
Я хочу написать программу с тестами. Задача такая: создать область для изучения материала к примеру с перелистыванием страниц на тему...

Выборка записей из таблицы по темам и по условию - MS Access
Всем привет!!! Обращаюсь к корефеям программирования в Access, ПОМОГИТЕ!!! Значит так, имеется база вопросов, причем вопросы...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

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