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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
#1

Не подключен файл, а работает, как так? - C++

07.02.2011, 21:25. Просмотров 1123. Ответов 28
Метки нет (Все метки)

Всем еще раз привет. Вот Пишу программку в VC++, создал проект. В проекте создал .h файл в котором создал пространство имен Records и в нем объявил класс с прототипами методов, далее создал файл Employee.cpp в котором дал этим прототипам действие, далее создал файл testEmployee.cpp в котором подключил лишь .h файл с объявлением класса и вызвал один из методов выводящих на экран все свойства, но Employee.cpp в котором даю действие прототипам не подключил, скомпилировал и все равно действия были такие, как я их задал в файле Employee.cpp, как они могли задействовать в проекте, если я не подключил файл в котором предусмотрены действие на вызовы разных методов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2011, 21:25     Не подключен файл, а работает, как так?
Посмотрите здесь:
C++ setprecision() не работает, или работает не так как нужно
Файл: Как сделать так, чтобы числа в файл были прописаны не рандомно? C++
Файл: Как сделать так, чтобы при запуске программы проверялось, существует ли файл? C++
C++ Заголовочный файл подключен, но не виден тип
#define работает не так, как ожидается C++
C++ rand() работает не так как нужно
C++ Код не работает так, как хотелось бы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:08  [ТС]     Не подключен файл, а работает, как так? #16
ForEveR, да это я сам так написал, просто хочу понять суть строки
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.02.2011, 22:12     Не подключен файл, а работает, как так? #17
BTR, пример использования ссылок:

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
#include <iostream>
 
void swap(int &left, int &right)
{
    int temp = left;
    left = right;
    right = temp;
}
 
int mian()
{
    int a, b;
 
    std::cout << "Enter a: ";
    std::cin >> a;
    std::cout << "Enter b: ";
    std::cin >> b;
 
    std::cout << "Before swaping: a = " << a << ",  b = " << b << std::endl;
    swap(a, b);
    std::cout << "After swaping: a = " << a << ",  b = " << b << std::endl;
 
    return 0;
}
Добавлено через 1 минуту
Как видно, используется стандартный синтаксис вызова функции swap (т.е. без передачи функции указателей на a и b), однако фактические значения всё равно меняются. Ссылку, таким образом, можно интерпретировать как константный разыменованный указатель.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
07.02.2011, 22:12     Не подключен файл, а работает, как так? #18
BTR, Ф-я возвращает ссылку, т.е. мы можем изменять то, что вернет функция

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class Int
{
public:
   Int(int t=0):a(t)
   {
   }
   const int& GetA() const {return a;}
   int& SetA() {return a;}
private:
   int a;
};
 
int main()
{
    Int Ob(5);
    std::cout<<Ob.GetA()<<'\n';
    Ob.SetA()=15;
    std::cout<<Ob.GetA()<<'\n';
    return 0;
}
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:16  [ТС]     Не подключен файл, а работает, как так? #19
То есть возвращаемое значение можно менять на прямую, а не его копию? Правильно понял?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
07.02.2011, 22:16     Не подключен файл, а работает, как так? #20
BTR, В моем случае да.
Но так лучше не писать. Я думаю более удачным примером будет нечто вроде...

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <vector>
 
class Test
{
public:
   Test()
   {
   }
   void push(int t)
   {
       tst.push_back(t);
   }
   int& operator [] (size_t i)
   {
       if(i >= tst.size())
           throw std::out_of_range("End");
       return tst[i];
    }
private:
   std::vector<int> tst;
};
 
int main()
{
    const int n=10;
    Test Ob;
    for(int i=0; i<n; ++i)
       Ob.push(i+1);
    try
    {
    std::cout<<Ob[5]<<'\n';
    Ob[5]=10;
    std::cout<<Ob[5]<<'\n';
    }
    catch(...)
    {
    }
    return 0;
}
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:18  [ТС]     Не подключен файл, а работает, как так? #21
Но у меня еще есть парочка вопросов
Что означает команда throw? Что означает строка throw expection()
И что означает вот эта строка Employee& theEmployee = mEmployee[mNextSlot++]; ? заранее спасибо
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.02.2011, 22:22     Не подключен файл, а работает, как так? #22
BTR, ну вообще ссылка подобна указателю, только она по умолчанию разыменована, что очень облегчает некоторые моменты. В частности, не нужно постоянно писать звёздочки и амперсанды. Именно этот факт, кстати, и используется при перегрузке операций: не будь ссылок, для сложения двух объектов нашего собственного класса (при условии написания соответствующего оператора) приходилось бы писать нечто такое: (&c) = (&a) + (&b);

Добавлено через 2 минуты
BTR, вы вперёд забегаете. В обучении нужна методичность, последовательность. Не дошли ещё до исключений - не лезьте вперёд, а то в голове в итоге каша останется.

Employee& theEmployee = mEmployee[mNextSlot++];
Создаётся ссылка на объект типа Employee с именем theEmployee и инициализируется объектом mEmployee[mNextSlot]; Т.о., theEmployee становится псевдонимом mNextSlot-го элемента массива mEmployee. Псевдоним - ключевой термин для понимания ссылок. Ссылка - псевдоним объекта.
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:25  [ТС]     Не подключен файл, а работает, как так? #23
так а какой смысл от команды throw? И еще не пойму, зачем при объявлении объекта ставить ссылку &, зачем? Какой от нее смысл? При объявлении в смысле
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
07.02.2011, 22:26     Не подключен файл, а работает, как так? #24
BTR, throw, try, catch - обработка исключений, где
try - начало защищенного блока
throw - "бросок" исключения
catch - поимка исключения
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
07.02.2011, 22:30     Не подключен файл, а работает, как так? #25
BTR, ссылка только при объявлении и инициализируется. Сравните два фрагмента:

C++
1
2
3
4
5
6
int x = 10;
int &refx = x;
++x;
std::cout << x << "  " << xref;
++refx;
std::cout << x << "  " << xref;
C++
1
2
3
4
5
6
int x = 10;
int refx = x;
++x;
std::cout << x << "  " << xref;
++refx;
std::cout << x << "  " << xref;
Убрали всего один символ, и как много изменилось. В первом случае и x, и refx ссылались на одну и ту же область памяти, и при изменении одного из объектов, соответственно, изменялась эта область памяти. Во втором случае у нас две разные переменные, идентификаторы для разных ячеек памяти. Изначально они обе равны 10, однако меняем x, а xref так и остаётся со старым значением. И наоборот.

throw - когда дойдёте до исключений - поймёте (ну зачем мне здесь главу из книги переписывать? Так хотите узнать - гугл вам в помощь).
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:34  [ТС]     Не подключен файл, а работает, как так? #26
всем спасибо. В особенности ForEveR и silent_1991 - век не забуду. Думаю меня Вы тоже век не забудете после такого груза . Ну ладно спасибо. Если что я еще обращусь?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
07.02.2011, 22:35     Не подключен файл, а работает, как так? #27
BTR, Глупые вопросы задаете, товарищ. Конечно, обращайтесь. Форум как бэ для этого и существует.
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:43  [ТС]     Не подключен файл, а работает, как так? #28
не ну просто Вы опытные в С++, а у меня лишь трехлетний опыт программирования на РНР и смею заверить, что С++ довольно-таки намного сложней РНР. Они всего-лишь немногим похожи
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2011, 23:08     Не подключен файл, а работает, как так?
Еще ссылки по теме:
C++ Цикл не работает так как надо
Функция не работает так, как нужно C++
Работает не так как надо(классы) C++
Условие в цикле do while работает не так, как ожидается C++
C++ Вывод из файла работает на так как надо

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

Или воспользуйтесь поиском по форуму:
silent_1991
07.02.2011, 23:08     Не подключен файл, а работает, как так?
  #29

Не по теме:

BTR, если вас смутило заявление о том, что вы задаёте глупые вопросы, то это относилось к вашему вопросу

Цитата Сообщение от BTR Посмотреть сообщение
Если что я еще обращусь?

Yandex
Объявления
07.02.2011, 23:08     Не подключен файл, а работает, как так?
Ответ Создать тему
Опции темы

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