Суббота, 16 Ноября 2024, 23:49

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
goldsphereДата: Четверг, 29 Марта 2012, 06:13 | Сообщение # 201
заслуженный участник
Сейчас нет на сайте
Quote (AgentToxa)
А если честно, я не понял зачем ты описание объекта заключил в фигурные скобки.

Это называется "блок"!Чтобы зрительно видеть, что к чему относится!Чтобы не было всё в каше!Я могу даже так сделать
Code
{
cout<<"C++"<<endl;
}
{
cout<<"C++"<<endl;
}


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Четверг, 29 Марта 2012, 15:05
M1ghtMortalДата: Четверг, 29 Марта 2012, 12:06 | Сообщение # 202
участник
Сейчас нет на сайте
goldsphere, Ты первый, у кого я вижу такое. Просто пустыми строками ограничится нельзя?

Java/C++/Unity(C#) Programmer.
Мой блог MightMortal.RU
goldsphereДата: Четверг, 29 Марта 2012, 15:07 | Сообщение # 203
заслуженный участник
Сейчас нет на сайте
Ну это уже дело вкуса!Можно и пустыми строками, можно и блоками, можно и пустым комментом "//"

FinderX - Android Аркада
НохчиДата: Четверг, 29 Марта 2012, 15:40 | Сообщение # 204
заслуженный участник
Сейчас нет на сайте
Все нормально, если иметь ввиду что данные объявленные внутри такого блока недоступны вне его. Хоть стиль мягко говоря странный.

Многие вопросы по Windows отпадут, если посмотреть тут
goldsphereДата: Четверг, 29 Марта 2012, 17:01 | Сообщение # 205
заслуженный участник
Сейчас нет на сайте
Quote (Нохчи)
Хоть стиль мягко говоря странный.

Пожалуй буду отвыкать от него!
У меня вопрос!У меня есть касс в файле classes.h и экземпляры классы с данными в main.cpp.Как можно экземпляры класса запихать в classes.h или в другой файл.Я пробовал так:создавал в classes.h функцию туда все экземпляры с данными засовывал.И создавал прототип функции.Однако когда я хотел вызвать функцию из класса, которая печатает данные экземпляра....компилятор подчёркивает имя экземпляра и пишет: идентификатор не определён!
Так можно ли экземпляр класса с его данными выносить в отдельный файл?


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Четверг, 29 Марта 2012, 17:05
НохчиДата: Четверг, 29 Марта 2012, 17:53 | Сообщение # 206
заслуженный участник
Сейчас нет на сайте
Я не совсем понимаю, что ты пытаешься сделать. Выложи своий нерабочий код, может так станет яснее.

Многие вопросы по Windows отпадут, если посмотреть тут
M1ghtMortalДата: Четверг, 29 Марта 2012, 18:25 | Сообщение # 207
участник
Сейчас нет на сайте
Если я правильно понял, то у тебя нету имплиментации метода из класса. Хотя я не уверен что правильно понял, с кодом будет понятнее.

Java/C++/Unity(C#) Programmer.
Мой блог MightMortal.RU
goldsphereДата: Четверг, 29 Марта 2012, 18:29 | Сообщение # 208
заслуженный участник
Сейчас нет на сайте
Ну вот видоизменённый и урезанный код:
classes.h:

main.cpp:

Выделенное жирным шрифтом надо перенести в classes.h или любой другой файл, но так, чтобы в main.cpp работала функция x.metodPrint();и можно было работать с данными экземпляра...
Возможно ли это?Если да, то как?Повторяю - код лишь отображает смысл моего вопроса, он не является исходным!
В принципе для меня это не обязательно, но для оптимизации кода не помешает!


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Четверг, 29 Марта 2012, 18:34
НохчиДата: Четверг, 29 Марта 2012, 18:38 | Сообщение # 209
заслуженный участник
Сейчас нет на сайте
class.h
Code

class first
{
public:
  short int member_1;
  short int member_2;

  void print_members();
};

extern first x;


class.cpp
Code

#include "class.h"

first x;      

void first::print_members()
{
  cout<<member_1<<member_2<<endl;
}


main.cpp
Code

#include "class.h"

int main(void)
{
  x.member_1 = 180;
  x.member_2 = 120;
  x.print_members();  
}



Так что ли?


Многие вопросы по Windows отпадут, если посмотреть тут
goldsphereДата: Четверг, 29 Марта 2012, 18:43 | Сообщение # 210
заслуженный участник
Сейчас нет на сайте
Нет, смысл был в том, чтобы убрать эти строки из main.cpp и сохранить их в другом файле , чтобы при этом
Quote (goldsphere)
работала функция x.metodPrint();и можно было работать с данными экземпляра...

...так как у меня в проекте слишком много экземпляров и данных принадлежащих к ним.Словом - "разгрузить этот файл""


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Четверг, 29 Марта 2012, 18:44
НохчиДата: Четверг, 29 Марта 2012, 18:51 | Сообщение # 211
заслуженный участник
Сейчас нет на сайте
Quote (goldsphere)
Нет, смысл был в том, чтобы убрать эти строки из main.cpp и сохранить их в другом файле...так как у меня в проекте слишком много экземпляров и данных принадлежащих к ним.Словом - "разгрузить этот файл""

Ну так мы это и делаем. Относительно строк
Code

x.member_1 = 180;    
x.member_2 = 120;

Их мало куда-то сохранить, их еще нужно выполнить. Ты можешь добавить в класс метод init(), который будет выполнять это присваивание или чтоб это происходило в конструкторе:
class.h
Code

class first
{
public:
    first();

    short int member_1;
    short int member_2;

    void print_members();
};

extern first x;


class.cpp
Code

first::first()
{
    member_1 = 100;
    member_2 = 200;
}

void first::print_members()
{
    cout<<member_1<<member_2<<endl;
}

Теперь при создании экземляра класса first, его членам автоматически присваиваются значения 100 и 200 соответственно.


Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Четверг, 29 Марта 2012, 18:54
goldsphereДата: Пятница, 30 Марта 2012, 09:27 | Сообщение # 212
заслуженный участник
Сейчас нет на сайте
Всем привет!У меня такой вопрос мне нужно получить рандомное число от 1 до 6?Я так понимаю надо занести числа от 1 до 6 в массив и выбрать оттуда случайное звено, но как это сделать?Получался примерно такой код:
Code
int n = 6;   
int arr[n] = {1,2,3,4,5,6};   
int r = ... //Задать переменой r случайное число из массива
int y = arr[r]; //Вывод случайного числа


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Пятница, 30 Марта 2012, 09:27
zodiakДата: Пятница, 30 Марта 2012, 10:29 | Сообщение # 213
постоянный участник
Сейчас нет на сайте
goldsphere,
В с++ есть функция rand, генерящая случайное число.
С ее помощью получить число от 1 до 6 можно так
Code
1+(rand()%6)


Точка зору окремо взятого індивіда завжди суб'єктивна!

Взломщик
Battle City.Net
goldsphereДата: Пятница, 30 Марта 2012, 11:18 | Сообщение # 214
заслуженный участник
Сейчас нет на сайте
я так понимаю записывается так:
Code
int x = 1+(rand()%6)

А можно как-нибудь сделать, чтобы при каждой компиляции мы получали не тоже самое число!


FinderX - Android Аркада
НохчиДата: Пятница, 30 Марта 2012, 11:33 | Сообщение # 215
заслуженный участник
Сейчас нет на сайте
подключить хедер time.h и перед генерацией числа написать srand(time(0));

Многие вопросы по Windows отпадут, если посмотреть тут
zodiakДата: Пятница, 30 Марта 2012, 11:33 | Сообщение # 216
постоянный участник
Сейчас нет на сайте
Quote (goldsphere)
А можно как-нибудь сделать, чтобы при каждой компиляции мы получали не тоже самое число!


Задать стартовое значение генератора текущим временем

Code
srand(time(0))


для использования time(0) подключить time.h


Точка зору окремо взятого індивіда завжди суб'єктивна!

Взломщик
Battle City.Net
SnuuxДата: Пятница, 30 Марта 2012, 12:18 | Сообщение # 217
постоянный участник
Сейчас нет на сайте
goldsphere, пробуйте, если вам говорят насчет какой то незнакомой функции или вообще любое слово, сначала вбить его в гугл, а потом спрашивать. Ведь вы на специализированном сайте гораздо больше поймете и большему научитесь.
Например, вам подсказали, что для генерации сл. числа нужна функция rand(). Так введите в поиск "c++ rand() описание". Тыкайте на понравившийся название в поиске (вот например мне понравился этот сайт). А там читаете полностью информацию о необходимом. Но если вам не понравилось объяснение, не беда, идите опять в поиск и тыкните на название другого сайта.
Удачи)
AikidosДата: Воскресенье, 01 Апреля 2012, 12:58 | Сообщение # 218
постоянный участник
Сейчас нет на сайте
Всем привет. В общем, проблема такая (первый раз такое вижу). Код:

Code
m_pColBox1 = PLColdet::CollisionManager::GetInstance()->CreateModel(GetScene()->GetByName("Star01"), GetRenderer());
m_pColBox2 = PLColdet::CollisionManager::GetInstance()->CreateModel(GetScene()->GetByName("Star02"), GetRenderer());

delete m_pColBox1;


В чем, собственно, проблема? delete не вызывает деструктор. Память то он очищает, но, какого лешего он не вызывает деструктор?
Если явно вызвать деструктор, то он вызывается.

Буду рад выслушать разные предложения по этому поводу. Самому интересно из-за чего это может быть.

P.s. гугл не помог.

Добавлено (01.04.2012, 12:58)
---------------------------------------------
Всё. Проблема решена. Сорри за топик smile


Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.

Сообщение отредактировал Aikidos - Воскресенье, 01 Апреля 2012, 12:38
clidiДата: Воскресенье, 01 Апреля 2012, 20:45 | Сообщение # 219
почетный гость
Сейчас нет на сайте
Aikidos, А в чем проблема была?
vasua99Дата: Понедельник, 02 Апреля 2012, 18:49 | Сообщение # 220
GNU follower
Сейчас нет на сайте
Подскажите мне по такому вопросу,имеется класс абстрактный класс стек,в котором 2 виртуальные функции,и позже обьект этого абстрактного класса является аргументом,получается что при этом в качестве аргумента может быть любой производимый класс,а функции будут доступны только те,которые определенны в базовом классе как виртуальные так?и еще вопрос если класс является абстрактным,то все функции обязанные быть читсто виртуальными,и не могут быть только виртуальными.и последний вопрос - если в классе есть виртуальная функция работающая с переменной с доступом приват-тогда переопределив ее в производимом классе мы можешь работать с этой переменной(она с доступом приват в базовом классе,а функция виртуальная)
П.с вот код для понимания моего вопроса:
Code

class stack
{
  public:
     virtual void push(int) = 0;
     virtual int pop() = 0;
   private:
     int *stack_buff;
     int upper;
};

class array_stack : public stack
{
// ......
};
   
class my_stack : public stack
{
//.....
}

void my_func(stack arg) // можем передать и my_stack и array_stack
{
arg.push(12);
//....
}


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг