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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
titans2011
295 / 256 / 43
Регистрация: 27.09.2010
Сообщений: 1,058
#1

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

11.01.2012, 14:27. Просмотров 2465. Ответов 8
Метки нет (Все метки)

Привет всем. Прохожу тест, и нашёл такой вопрос.
В чем разница между 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 14:27     Обращение к классу
Посмотрите здесь:

Обращение к наследуемому классу с кодом в отдельно cpp - C++
Приветствую. Не могу обратится к наследуемому классу из самой программы. //pepople.h #pragma once #include &quot;stdafx.h&quot; ...

Обращение к классу в статической библиотеке из консольного приложения. С++ - C++
По условию в решении 2 проекта: статическая библиотека и консольное приложение. В статической библиотеке я прописал класс Queue т.е....

Алгоритм к классу DateTime - C++
Привет, срочно нужно алгоритм к класу DateTime.:help: Добавлено через 21 минуту Вот что мне надо реализовать: DaysInMonth -...

Отправка char классу - C++
Всем привет Вот так вот пытаюсь отправить buff на обработку классу APPA_codes /* Пусть будет main.cpp */ char buff; //в...

Типы классу. Приведение. С++ - C++
Для приведения от пользовательского типа в основной тип используется: 1. Перегруженный оператор = 2. Конструктор с одним параметром ...

Обратится ко второму классу - C++
Пытаюсь через вызов первого класса вывести info второго класса, но никак :(соответственно все разбиваю по файлам) Cfirst.h #ifndef...

C++ Как лучше обратиться к классу - C++
Добрый день. У меня такая ситуация. Есть некий класс A, содеращий массив классов B. class A { //какие-то методы и данные ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
455 / 428 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
11.01.2012, 14:30     Обращение к классу #2
Цитата Сообщение от titans2011 Посмотреть сообщение
X x;
конструктор X() вызывается неявно

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


//b.show(); //здесь ошибка компиляции, почему?
Где? http://liveworkspace.org/code/5f141f...e623b92ab3f9d7
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
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
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,354
11.01.2012, 14:38     Обращение к классу #4
Цитата Сообщение от dimcoder Посмотреть сообщение
Конструктор X() вызывается явно
Нет.
Это объявление функции с именем x, не принимающей никаких аргументов, и возвращающей значение типа X. Именно поэтому
//b.show(); //здесь ошибка компиляции, почему?
- объект b, как неверно предполагает автор кода, попросту НЕ СУЩЕСТВУЕТ....
titans2011
295 / 256 / 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
2539 / 1304 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.01.2012, 15:21     Обращение к классу #6
Цитата Сообщение от titans2011 Посмотреть сообщение
Какая функция?
Обыкновенная. Даже не функция, а прототип. А о функциях в любой книге пишут.
BRcr
4006 / 2295 / 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
295 / 256 / 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++
Помогите. Нужно сделать сложение, вычитание, умножение и деление. #include &lt;iostream&gt; using namespace std; class ch {private: int...

Указать классу на глобальный вектор - C++
#include &quot;my_header.h&quot; #include &lt;vector&gt; std::vector&lt;My_type&gt; my_vector; class My_class() { if (my_vector.empty()) { ;...

Получить доступ к родительскому классу - C++
Есть класс; class slave{ void print(); }; class master{ private: Slave a;

Ошибка при обращении к классу - C++
Есть класс для хранения элементов, к которым должен быть доступ из других классов - решил объявить как глобальный: Items.h: class...

Приведение типа к другому классу - C++
Предположим есть класс class A { char a; void foo(); }; можно ли делать так class B: public A


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

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

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