Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2013, 22:05   #61
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

А вот public:
Cat(int initialAge=5); Что ж е не видно?

область видимости - конструктор. Понял.

Последний раз редактировалось Dimka-novitsek; 10.09.2013 в 22:10.
Dimka-novitsek вне форума Ответить с цитированием
Старый 10.09.2013, 22:10   #62
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

public - я уже писал о том, что это такое.
Cat(int) - тоже писал, что это такое.
initialAge - уже писал, что это такое.

Еще раз: public - модификатор доступа, все идентификаторы, обявленные в этой области видимости видны вне класса.
initialAge - локальная переменная (формальный параметр), область видимости - конструктор Cat(int).

P.S - я Вам серьезно говорю: если книгу не читать, то можно весь форум заполонить вопросами, которые и в книге расписаны.

Последний раз редактировалось Igor95; 10.09.2013 в 22:13.
Igor95 вне форума Ответить с цитированием
Старый 10.09.2013, 22:14   #63
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Спасибо!!!
Dimka-novitsek вне форума Ответить с цитированием
Старый 10.09.2013, 22:17   #64
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Давай, Игорь, я верю, что ты все объяснишь)
Только небольшое замечание по поводу
Цитата:
Ответ: в области видимости Cat (private-области видимости)
private не имеет отношения к видимости. Только к доступности. Доступность и видимость - разные понятия, но их часто путают. Например, как компилятор ищет, какую бы функцию вызвать:
1) ищет имя вызываемой функции в областях видимости, находит всех кандидатов
2) среди кандидатов по типу аргументов выбирает самую подходящую функцию
3) и только теперь проверяет доступность
Это называется поиском Кенига или ADL, ежели по-умному)
still_alive вне форума Ответить с цитированием
Старый 10.09.2013, 22:23   #65
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Нет, спасибо, геройствовать с объяснениями что-то не хочется

Да, Вы правы, действительно спутал эти два понятия. Спасибо за разъяснение.
Igor95 вне форума Ответить с цитированием
Старый 11.09.2013, 00:04   #66
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Да, ну не знал я, что област видимости сам конструктор. Ведь написано Как же инициализировать переменные-члены класса? Для этого в классе используется специальная функция-член, называемая конструктором.

Я думал, конструктор нужен только потому, что в классе нельзя написать просто int initialAge=5 и как- либо работать с переменной.

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

Ну, хорошо. Значит, конструктор- это как функция, но порядком ущербная, наружу в принципе ничего не может выдать... ??
Dimka-novitsek вне форума Ответить с цитированием
Старый 11.09.2013, 00:42   #67
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от Dimka-novitsek Посмотреть сообщение
Да, ну не знал я, что област видимости сам конструктор. Ведь написано Как же инициализировать переменные-члены класса? Для этого в классе используется специальная функция-член, называемая конструктором.

Я думал, конструктор нужен только потому, что в классе нельзя написать просто int initialAge=5 и как- либо работать с переменной.

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

Ну, хорошо. Значит, конструктор- это как функция, но порядком ущербная, наружу в принципе ничего не может выдать... ??
Конструктор служит для инициализации данных-членов объекта.
Как и любой другой метод (конструктор - специальный метод), он образует свою область видимости. Модификаторы доступа здесь ни причем.
Разве initialAge - переменная-член КЛАССА?

Последний раз редактировалось Igor95; 11.09.2013 в 00:44.
Igor95 вне форума Ответить с цитированием
Старый 11.09.2013, 01:08   #68
Vladiger
Пользователь
 
Регистрация: 31.08.2013
Сообщений: 93
По умолчанию

Цитата:
Ну, хорошо. Значит, конструктор- это как функция, но порядком ущербная, наружу в принципе ничего не может выдать
Ну почему сразу "ущербная"? Вашими устами функция типа void тоже ущербная...
Вы немного путаете понятия выдать наружу и вернуть результат.
Вернуть результат конструктор не может, а вот что вы называете "выдать наружу" - да запросто:

Объявите во входных параметрах ссылку на какую нибудь переменную и оперируйте с ней как с ссылкой, делайте что хотите... Результат этих операций внутри конструктора, будет отображен снаружи.
А если ещё проще, можно оперировать с глобальными переменными, они то уж точно снаружи находятся:

Код:
#include <iostream>

using namespace std;

class Sample {
	public:
		Sample(int* a) {
			*a = 10;
		}
};

int main() {
	int nValue = 0;
	cout << "nValue = " << nValue << endl;

	Sample obj(&nValue);

	cout << "nValue = " << nValue << endl;

	system("PAUSE");
	return 0;
}

Последний раз редактировалось Vladiger; 11.09.2013 в 01:12. Причина: орфография
Vladiger вне форума Ответить с цитированием
Старый 11.09.2013, 02:20   #69
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Здесь автор, видимо, имел ввиду проблему именно видимости идентификатора (т.е формального параметра), а не способы, с помощью которых можно получить/изменить значение формального параметра и т.д.

Цитата:
А если ещё проще, можно оперировать с глобальными переменными, они то уж точно снаружи находятся
В плане удобства написания программы для программиста - конечно, но в реальности такой подход - ипользование глобальных переменных для упрощения работы программиста - плохо сказывается на качестве ПО + если это масштабный продукт, то довольно сложно и запутанно будет адаптировать такое ПО под новые решения.

Последний раз редактировалось Igor95; 11.09.2013 в 02:23.
Igor95 вне форума Ответить с цитированием
Старый 11.09.2013, 11:49   #70
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Доброго утра! Спасибо!! А меня все интересует, и способы, так как с темой я вобще знаком очень слабо.Я почти неизбежн узнаю что-то новое.
Dimka-novitsek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу прощения. Но у меня опять проблема. Написал код но что то неправельно потправте меня. Sergey 23 Visual C++ 2 15.09.2012 19:59
CheckBox, что-то у меня не получается... Snekich Microsoft Office Excel 2 18.12.2011 20:12
Меня что, кто-то атакует? Altera Свободное общение 9 03.10.2010 18:34
Меня хакнули, что делать? Alex Cones Свободное общение 6 03.03.2010 23:14
что-то у меня не получается dinozavr Помощь студентам 10 22.04.2009 21:45