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

Обращение к классу - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
titans2011
293 / 254 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
11.01.2012, 14:27     Обращение к классу #1
Привет всем. Прохожу тест, и нашёл такой вопрос.
В чем разница между X x; и X x(); ?
Вот я не совсем понял. Сделал небольшой примерчик:
Код
class A
{
private:
	int i,j;
public:
	void show ();
	A(){i=0;j=9; cout<<"Konstruktor"<<endl;}
	~A(){cout<<"Destructor"<<endl;}
};

void A::show()
{
	cout<<"i= "<<i<<" j= "<<j<<endl;
}

int main()
{
	A a;
	A b();
	A c=a;
	a.show(); 
       //b.show(); //здесь ошибка компиляции, почему?
	return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
11.01.2012, 14:30     Обращение к классу #2
Цитата Сообщение от titans2011 Посмотреть сообщение
X x;
конструктор X() вызывается неявно

Цитата Сообщение от titans2011 Посмотреть сообщение
X x();
Конструктор X() вызывается явно


//b.show(); //здесь ошибка компиляции, почему?
Где? http://liveworkspace.org/code/5f141f...e623b92ab3f9d7
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.01.2012, 14:38     Обращение к классу #3
Подстава классическая.
X x; // объявление переменой x класса X
Х х(); // объявление функции х, возвращающей тип Х.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
class X {
 public:
  X() {}
  int getX() { return x; }
 private:
  int x;
};
 
int main() {
  X x();
  x.getX(); // не выйдет, ибо x это функция.
};
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
11.01.2012, 14:38     Обращение к классу #4
Цитата Сообщение от dimcoder Посмотреть сообщение
Конструктор X() вызывается явно
Нет.
Это объявление функции с именем x, не принимающей никаких аргументов, и возвращающей значение типа X. Именно поэтому
//b.show(); //здесь ошибка компиляции, почему?
- объект b, как неверно предполагает автор кода, попросту НЕ СУЩЕСТВУЕТ....
titans2011
293 / 254 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
11.01.2012, 14:50  [ТС]     Обращение к классу #5
Цитата Сообщение от dimcoder Посмотреть сообщение
конструктор X() вызывается неявно


Конструктор X() вызывается явно


//b.show(); //здесь ошибка компиляции, почему?
Где? http://liveworkspace.org/code/5f141f...e623b92ab3f9d7
А ну так я специально поставил комент, что бы была компиляция. Просто если раскоментировать строку, то ничего не заработает.

Добавлено через 2 минуты
Цитата Сообщение от lemegeton Посмотреть сообщение
Подстава классическая.
X x; // объявление переменой x класса X
Х х(); // объявление функции х, возвращающей тип Х.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
class X {
 public:
  X() {}
  int getX() { return x; }
 private:
  int x;
};
 
int main() {
  X x();
  x.getX(); // не выйдет, ибо x это функция.
};
Какая функция? Я не очень понимаю. Можете дать ссылку на материал, почитать?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.01.2012, 15:21     Обращение к классу #6
Цитата Сообщение от titans2011 Посмотреть сообщение
Какая функция?
Обыкновенная. Даже не функция, а прототип. А о функциях в любой книге пишут.
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
11.01.2012, 15:40     Обращение к классу #7
Цитата Сообщение от titans2011 Посмотреть сообщение
Какая функция? Я не очень понимаю.
Цитата Сообщение от soon Посмотреть сообщение
Даже не функция, а прототип. А о функциях в любой книге пишут.
Просто в книгах обычно наглядней пишут:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// это можно встретить в книге
double Xfunc(void); // объявление функции, ее прототип
// ...
double Xfunc(void){
 // определение функции
}
 
// а это у вас
X x(); // это прототип: Х - ранее описанный вами тип, объекты этого типа можно возвращать в функциях
         // х - имя функции, ничто не мешает нам ее так обозвать
         // в скобках void можно и не писать, компилятор и так понимает
// ... а вот определения функции у вас нету, на что компилятор скорее всего ругнулся предупреждением, а не ошибкой
titans2011
293 / 254 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
11.01.2012, 16:12  [ТС]     Обращение к классу #8
Про прототип я понял. А вот можете написать простейшее определение этой функции. А то я никак не пойму. Я когда начинаю писать, уж сильно смахивает это на конструктор.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2012, 17:58     Обращение к классу
Еще ссылки по теме:

Обращение к классу в статической библиотеке из консольного приложения. С++ C++
C++ Типы классу. Приведение. С++
C++ Обращение к наследуемому классу с кодом в отдельно cpp

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.01.2012, 17:58     Обращение к классу #9
Цитата Сообщение от titans2011 Посмотреть сообщение
А вот можете написать простейшее определение этой функции.
Ну например.
C++
1
2
3
X x() {
  return X();
}
Цитата Сообщение от titans2011 Посмотреть сообщение
Я когда начинаю писать, уж сильно смахивает это на конструктор.
Да, С++ такой С++. Ничего, привычка -- дело наживное.
Yandex
Объявления
11.01.2012, 17:58     Обращение к классу
Ответ Создать тему
Опции темы

Текущее время: 18:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru