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

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

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

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

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

Всем еще раз привет. Вот Пишу программку в VC++, создал проект. В проекте создал .h файл в котором создал пространство имен Records и в нем объявил класс с прототипами методов, далее создал файл Employee.cpp в котором дал этим прототипам действие, далее создал файл testEmployee.cpp в котором подключил лишь .h файл с объявлением класса и вызвал один из методов выводящих на экран все свойства, но Employee.cpp в котором даю действие прототипам не подключил, скомпилировал и все равно действия были такие, как я их задал в файле Employee.cpp, как они могли задействовать в проекте, если я не подключил файл в котором предусмотрены действие на вызовы разных методов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2011, 21:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не подключен файл, а работает, как так? (C++):

Что в коде ни так? while не работает так, как ожидаю - C++
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...

setprecision() не работает, или работает не так как нужно - C++
cout << setw(5) << "X=" << setprecision(2) << X; cout << setw(20) << "X=" << setprecision(0)<< X << endl; cout << setw(5) << "Y=" <<...

Файл: Как сделать так, чтобы числа в файл были прописаны не рандомно? - C++
Здраствуйте, дан код: #include "stdafx.h" #include <iostream> #include <fstream> #include <cstdlib> #include <ctime> ...

Файл: Как сделать так, чтобы при запуске программы проверялось, существует ли файл? - C++
Как сделать так, чтобы при запуске программы проверялось, существует ли файл. Если да, то он обнуляется, если нет, то создается?

Заголовочный файл подключен, но не виден тип - C++
Работаю в QT. Выдает ошибку does not name a type, как будто нет такого типа. У меня 2 класса и в каждом указатель на другой. Подключаю...

Цикл не работает так как надо - C++
Всем привет! Народ, у меня цикл в программе работает не так как надо. 1 круг цикла происходит в норме, а когда начинается 2ой он...

28
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:08  [ТС] #16
ForEveR, да это я сам так написал, просто хочу понять суть строки
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 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), однако фактические значения всё равно меняются. Ссылку, таким образом, можно интерпретировать как константный разыменованный указатель.
1
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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;
}
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:16  [ТС] #19
То есть возвращаемое значение можно менять на прямую, а не его копию? Правильно понял?
0
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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;
}
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:18  [ТС] #21
Но у меня еще есть парочка вопросов
Что означает команда throw? Что означает строка throw expection()
И что означает вот эта строка Employee& theEmployee = mEmployee[mNextSlot++]; ? заранее спасибо
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
07.02.2011, 22:22 #22
BTR, ну вообще ссылка подобна указателю, только она по умолчанию разыменована, что очень облегчает некоторые моменты. В частности, не нужно постоянно писать звёздочки и амперсанды. Именно этот факт, кстати, и используется при перегрузке операций: не будь ссылок, для сложения двух объектов нашего собственного класса (при условии написания соответствующего оператора) приходилось бы писать нечто такое: (&c) = (&a) + (&b);

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

Employee& theEmployee = mEmployee[mNextSlot++];
Создаётся ссылка на объект типа Employee с именем theEmployee и инициализируется объектом mEmployee[mNextSlot]; Т.о., theEmployee становится псевдонимом mNextSlot-го элемента массива mEmployee. Псевдоним - ключевой термин для понимания ссылок. Ссылка - псевдоним объекта.
0
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:25  [ТС] #23
так а какой смысл от команды throw? И еще не пойму, зачем при объявлении объекта ставить ссылку &, зачем? Какой от нее смысл? При объявлении в смысле
0
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
07.02.2011, 22:26 #24
BTR, throw, try, catch - обработка исключений, где
try - начало защищенного блока
throw - "бросок" исключения
catch - поимка исключения
2
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 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 - когда дойдёте до исключений - поймёте (ну зачем мне здесь главу из книги переписывать? Так хотите узнать - гугл вам в помощь).
1
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:34  [ТС] #26
всем спасибо. В особенности ForEveR и silent_1991 - век не забуду. Думаю меня Вы тоже век не забудете после такого груза . Ну ладно спасибо. Если что я еще обращусь?
0
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
07.02.2011, 22:35 #27
BTR, Глупые вопросы задаете, товарищ. Конечно, обращайтесь. Форум как бэ для этого и существует.
2
BTR
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
07.02.2011, 22:43  [ТС] #28
не ну просто Вы опытные в С++, а у меня лишь трехлетний опыт программирования на РНР и смею заверить, что С++ довольно-таки намного сложней РНР. Они всего-лишь немногим похожи
0
silent_1991
07.02.2011, 23:08     Не подключен файл, а работает, как так?
  #29

Не по теме:

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

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

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2011, 23:08
Привет! Вот еще темы с ответами:

Работает не так как надо(классы) - C++
Задача. Создать класс хранящий в себе инн. Проверить его на верность и вывести результат. class NIP { public: NIP(const...

#define работает не так, как ожидается - C++
Здравствуйте. Подскажите, пожалуйста, почему в таком случае некорректно использовать #define: switch (kind) { case 1: ...

Функция не работает так, как нужно - C++
Вот задание: В заданном одномерном массиве поменять местами соседние элементы, стоящие на чётных местах, с элементами, стоящими на...

Код не работает так, как хотелось бы - C++
В книге есть задача с кодом: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { setlocale (0, &quot;&quot;); ...


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

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

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