Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

функция объявленная в классе, реализация за пределами класса

5.4K
20 января 2010 года
cursor
114 / / 05.01.2008
Здравствуйте.
Пытаюсь разобрать классы. Скажите почему на такую конструкцию компилятор пишет что в файле obj уже есть get_hidden()?

Код:
class make_hidden {
   
private:
    float first, second;

public:
    float get_hidden();
    make_hidden(CString f, CString s) {
        first = _wtof(f.GetBuffer(f.GetLength()));
        second = _wtof(s.GetBuffer(f.GetLength()));
    }
};

float make_hidden::get_hidden() {
        return second / first * 100 - 100;
}


Учебник который я читаю там написано что вот так можно объявлять внешние функции
5.3K
21 января 2010 года
!Волк
95 / / 19.07.2006
Если описание функции-члена класса находится в h - файле, то надо перед функцией писать ключевое слово inline.
5.4K
21 января 2010 года
cursor
114 / / 05.01.2008
точно, спасибо
А еще переменные ссылочного типа
int &n = r;
n = 5;
Эквивалентно r=5;.
Так вот переменная n существует только для компилятора? После компиляции ее не будет?
5.3K
21 января 2010 года
!Волк
95 / / 19.07.2006
Переменная-ссылка это адрес на память, где находится переменная. Она никуда не исчезнет. Их преимущество проявляется, когда например в функцию нужно передать большой объект. Если передавать объект обычным способом, то объект будет копироваться, что приведет к дополнительным затратам процессорного времени. Если передавать объект через ссылку, то копироваться будет адрес объекта. По сути, ссылка эквивалента константному указателю, разница лишь в обращении к объекту.
5.4K
21 января 2010 года
cursor
114 / / 05.01.2008
получается после компиляции
int *p = &n
станет адресом в памяти, который может содержать адрес переменной n
а
int &p = n
после компиляции станет просто числом-адресом n
5.3K
21 января 2010 года
!Волк
95 / / 19.07.2006
В обоих случаях это место в памяти, где хранится адрес переменной. Это если не учитывать оптимизацию, которую различные компиляторы делают по разному и в зависимости от опций компиляции. Но с точки зрения языка С++, это не важно.
3
21 января 2010 года
Green
4.8K / / 20.01.2000
Цитата: cursor
точно, спасибо
А еще переменные ссылочного типа
int &n = r;
n = 5;
Эквивалентно r=5;.
Так вот переменная n существует только для компилятора? После компиляции ее не будет?


Что ты подразумеваешь под "После компиляции ее не будет" ?

'r' тоже "существует только для компилятора", после компиляции её не будет, останется лишь та сущность которая была названа 'r', а имени 'r' после компиляции не будет.

'n' - это псевдоним для той сущности, которая названа r.
т.е. по сути 'r' и 'n' - это два имени одного и того же объекта.

И здесь не надо концентрироваться на адресах или указателях.

Представь себе толпу людей. До компиляции у них были имена и даже псевдонимы, клички (ссылки), а после компиляции люди остались а имен у них нет... толпа.

Имена и ссылки в общем случае это нефизические сущности, которые помогают идентифицировать физические объекты.
Поэтому говоря 'r' имеется в виду не само имя, а объект, которым оно названо.
С ссылкой так же,- когда используется ссылка подразумевается именно объект, на который она ссылается, а не она сама.

Поэтому

 
Код:
int &n = r;
n = 5;

значит, что некоторому объекту, с именем 'r', известному так же под именем 'n', присваевается значение 5.
41K
02 февраля 2010 года
gaga
44 / / 22.07.2009
Кстати, вспомнил про эту тему. А с каких пор с++ научился различать файлы? Я считал, что С++ знает только о единице трансляции, в которой может любое количество любых файлов, и которая на практике представляет собой текст компилируемого .cpp и всего, что включено в него с помощью #include. Т.е. не должно быть разницы в каком файле реализовывать функции-члены. Это не так?
3
02 февраля 2010 года
Green
4.8K / / 20.01.2000
Цитата: gaga
Кстати, вспомнил про эту тему. А с каких пор с++ научился различать файлы? Я считал, что С++ знает только о единице трансляции, в которой может любое количество любых файлов, и которая на практике представляет собой текст компилируемого .cpp и всего, что включено в него с помощью #include. Т.е. не должно быть разницы в каком файле реализовывать функции-члены. Это не так?


Реализации принято писать в файлах .c/.cpp, т.к. именно с ними принято ассоциировать единицы трансляции. А файлы .h могут (и обычно так и происходит) включаться в несколько .c/.cpp.

Это же очевидно.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог