Russian Qt Forum
Ноябрь 27, 2024, 13:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Пространство имен  (Прочитано 20821 раз)
thechicho
Гость
« : Январь 12, 2012, 16:33 »

Как использовать методы класса в другом классе без использования имени класса?
т.е. есть класс Functions;

так работает
Код
C++ (Qt)
int randInt = Functions::mt_rand(5,11);
как сделать, чтобы работало так
Код
C++ (Qt)
int randInt = mt_rand(5,11);

я пробовал в .h класса
Код
C++ (Qt)
namespace Ui {
class Functions;
}

но не канает.
Записан
thechicho
Гость
« Ответ #1 : Январь 12, 2012, 16:34 »

я не догоняю, как пространства имен работают. поясните, плиз, на моем примере, как мне сделать.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Январь 12, 2012, 16:41 »

так, как ты хочешь, сделать нельзя. если метод (статический в данном случае) относится к классу, значит надо указывать имя класса. если вынесешь метод за класс, т.е. сделаешь обычной функцией, тогда имя не нужно указывать.

пространства имён просто заключают всё, что находится в них, в некую отдельную сущность. это позволяет использовать функции/классы/переменные/перечисления/и т.п. с одинаковыми именами. в литературе, та даже наверное и на вики, это всё прекрасно расписано.
элементарный пример:
Код
C++ (Qt)
namespace A {
int a;
void f();
}
namespace B {
int a;
void f();
}
 
// изменение разных переменных
A::a = 5;
B::a = 12;
// вызов разных функций
A::f();
B::f();
« Последнее редактирование: Январь 12, 2012, 16:43 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Январь 12, 2012, 16:42 »

Вынести функцию из класса.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
thechicho
Гость
« Ответ #4 : Январь 12, 2012, 16:57 »

// пространства имён позволяют использовать функции/классы/переменные/перечисления/и т.п. с одинаковыми именами
понял, сенкс.

// если вынесешь метод за класс, т.е. сделаешь обычной функцией, тогда имя не нужно указывать.
приведи, плиз, пример. я не понимаю как и куда вынести, т.е. где прописать.

просто, у меня есть ~10 функций, кот. я постоянно пользуюсь в проектах.
мне надоело их каждый раз переносить в новый проект, поэтому я решил сделать 1 класс, его подключить и использовать эти функции.
тут наследование тогда получается...

в принципе, функции вроде работают, если их статическими объявить и имя класса перед ними добавлять. либо объявить класс, и уже . || -> получать доступ к членам класса. но я думал можно сделать без имени класса, чтобы каждый раз его не вводить, т.к. функции используются часто...
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Январь 12, 2012, 17:02 »

Нахрена класс? Просто выносишь функции в отдельный h/cpp, который и подключаешь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
thechicho
Гость
« Ответ #6 : Январь 12, 2012, 17:11 »

сделал, множественное наследование (+свой класс) и все вроде работает, как и хотел.

// Нахрена класс? Просто выносишь функции в отдельный h/cpp, который и подключаешь.
а это тема, кстати) чот я не подумал, что так работать будет, ща попробую.
Записан
andrew.k
Гость
« Ответ #7 : Январь 12, 2012, 21:29 »

сделал, множественное наследование (+свой класс) и все вроде работает, как и хотел.

// Нахрена класс? Просто выносишь функции в отдельный h/cpp, который и подключаешь.
а это тема, кстати) чот я не подумал, что так работать будет, ща попробую.
"А слона то я и не приметил" (с) И.А. Крылов
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Январь 12, 2012, 21:29 »

сделал, множественное наследование (+свой класс) и все вроде работает, как и хотел.

// Нахрена класс? Просто выносишь функции в отдельный h/cpp, который и подключаешь.
а это тема, кстати) чот я не подумал, что так работать будет, ща попробую.
Только оберни все функции в namespace на всякий случай. У меня так во всех проектах core.cpp + core.h, где глобальные константы и функции.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
thechicho
Гость
« Ответ #9 : Январь 12, 2012, 22:13 »

//"А слона то я и не приметил" (с) И.А. Крылов
Воды слонам. А нам лишь бы работало.

Пантер, залей плиз эти файлы, я гляну как у тебя все сделано. + может какие функции пригодятся потом.
просто я через класс все уже сделал, вроде ровно работает пока. наследую его, чтобы использовать. класс в отдельных файлах, почти как у тебя получилось.
Записан
andrew.k
Гость
« Ответ #10 : Январь 12, 2012, 22:25 »

//"А слона то я и не приметил" (с) И.А. Крылов
Воды слонам. А нам лишь бы работало.

Пантер, залей плиз эти файлы, я гляну как у тебя все сделано. + может какие функции пригодятся потом.
просто я через класс все уже сделал, вроде ровно работает пока. наследую его, чтобы использовать. класс в отдельных файлах, почти как у тебя получилось.
Это жесть. Представляешь если все так будут делать, что будет?
Записан
popper
Гость
« Ответ #11 : Январь 12, 2012, 22:55 »

Если есть набор постоянно используемых функций, то напрашивается решение собрать их в отдельную библиотеку. Видимо автор сообщения пришел в С++ из явы, если возникают трудности с объявлением функции вне класса. Предлагаю найти исходники любой библиотеки на С и изучить их структуру. Возможно, будет полезно почитать про ключевое слово
Код:
extern "C" 
Записан
thechicho
Гость
« Ответ #12 : Январь 13, 2012, 01:15 »

// Это жесть. Представляешь если все так будут делать, что будет?
работать будет
Записан
thechicho
Гость
« Ответ #13 : Январь 13, 2012, 01:16 »

у меня там 10+ функций, какая библиотека)
Записан
andrew.k
Гость
« Ответ #14 : Январь 13, 2012, 01:26 »

// Это жесть. Представляешь если все так будут делать, что будет?
работать будет
А представляешь список инклудов в большом проекте.
И он дополнится таким же списком наследуемых классов.
Раздуется класс, который будет все это использовать, код станет нечитаемым.
у меня там 10+ функций, какая библиотека)
Тем более какие сложности переделать эту глупость в namespace?

PS но я опять не забыл, что ты все делаешь для себя и для своих. Поэтому оставь лучше внутри класса)
Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.285 секунд. Запросов: 23.