Current time: 20.04.2024, 01:20 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
С++, общая тема
Author Message
NIKr0m@nceR Offline

Posts: 203
Post: #301

Ну вообще, это довольно сложный вопрос где как и что передавать и это сильно зависит от ситуации. Нас вот учили более-менее все нестандартные вещи передавать либо по константной ссылке либо по указателю - типо во избежание путаницы.
08.05.2012 20:12
Find all posts by this user Quote this message in a reply
GrayFace Offline
Forum Moderators

Posts: 1233
Post: #302

(27.04.2012 22:53)gamecreator Wrote:  он крайне корректный и крайне медленный. для ускорения можно сразу создавать новый массив нового размера, копировать, удалять старый и переприсваивать. но так теряется корректность и могут быть проблемы с освобождением памяти. вот в чем С лучше С++ - так это в выделении памяти. обрати внимание на функции calloc, realloc, free.

и на файл memory.h
36 Потеря корректности? Проблемы с освобождением?

Если массив часто надо увеличивать, то надо выделять больше памяти. Например, при нехватке памяти увеличивать размер выделенной памяти в 2 раза и, пока не заполнится, расширять без перевыделений.

(28.04.2012 15:06)packa Wrote:  
Code:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        ammo = new Graphics::TBitmap;
        ammo->LoadFromFile("ammo.bmp");
Form1->Canvas->Brush->Color=(TColor)RGB(0,0,0);
       Form1->Canvas->Rectangle(0,0,ClientWidth,ClientWidth);
/*Много кода и отрисовок*/
   delete ammo;
}
Надо 1 раз загружать из файла, а не в таймере.

(28.04.2012 17:41)gamecreator Wrote:  не рисуй ничего в таймере, забудь что ты вообще такое можешь. вот правильно сделали в windows forms в c#, что скрыли возможность рисования где попало.
Почему же? Спокойно можно рисовать в таймере и в OnPaint. Еще можно вызывать Repaint - он отрисовывает сразу, а не когда дойдет до сообщения.

(28.04.2012 18:28)Efrit Wrote:  Мда. А работать с прозрачными спрайтами не судьба? Поставил transparent у TImage в true и радуйся жизни...
Для анимации TImage неприменим из-за мерцания. Хотя DoubleBuffered может и поможет...

(03.05.2012 17:49)packa Wrote:  [принадлежность к башне][номер патрона в потоке (очереди)][корды патрона, а также его тип]
Где 3-е измерение? Даже в таком варианте "корды патрона, а также его тип" - это не 3-е измерение. А по сути тут одномерный массив патронов, точнее связный список. Если классы по-началу пугают, сделай патроны структурами, там всё просто, ни на какую мудрёную теорию не наткнёшься.


Вся правда обо мне
11.05.2012 14:44
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #303

чем сишные функции выделения памяти лучше и почему их нельзя юзать в плюсах я так и не узнаю.

Quote:Если классы по-началу пугают, сделай патроны структурами, там всё просто, ни на какую мудрёную теорию не наткнёшься.
а в чём собственно разница? в с++ они отличаются лишь формой записи и тем, что в классах по умолчанию прайвет а в структурах - паблик. и насчёт списка мне кажется не вполне прав - список это реализация, а требуемому функционалу отвечает контейнер очередь (как мне видится). здесь снова виден плюс ооп - если что-то надо поменять, то меняется "внутренность" класса, а все внешние функции, методы и т.д. "ничего не почувствуют"


всё на благо народа
11.05.2012 18:14
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #304

(11.05.2012 18:14)NIKr0m@nceR Wrote:  чем сишные функции выделения памяти лучше и почему их нельзя юзать в плюсах я так и не узнаю.

1. В плюсах нет аналогов realloc и calloc, _aligned_malloc(), который просто необходим для работы с SSEx, AVX.
2. Не используют в плюсах, потому что считается дурным стилем использование malloc вместо new или их вместе, пусть и для разных типов. То есть, вопрос стиля, по большей части.
11.05.2012 20:25
Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #305

Поделитесь ссылкой на нормальный компилятор под Си.
Чтобы ничего лишнего, никаких там #pragma hdrstop как в билдере например
И вообще чтобы был просто чистый лист, ф-ия сохранения, и компиляции\запуска. Ну и естественно отлов ошибок Sm

Перебрал много всяких они либо не работают на Win7, либо среды разработки, типа билдера (мне оч сложно в них разобраться, да и не нужно по большей части сейчас), либо виснут :-\

И да: Image: f0b899f25944t.jpg

Ab

Вопрос в догонку:
Можно ли обычному массиву в СИ в качестве размерности передавать переменную?
В С++ точно знаю что нет. Онли константы. Сам проверял))
А вот про СИ... по большей части сбили с толку здесь http://www.sql.ru/forum/actualthread.asp...25437&pg=1
Ваш ответ? Sm


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
12.05.2012 20:42
Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #306

Сам бы проверил, да вот компилятора не нашел, в добавок еще и забанили (


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
12.05.2012 20:47
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #307

Quote:Поделитесь ссылкой на нормальный компилятор под Си.
   Чтобы ничего лишнего, никаких там #pragma hdrstop как в билдере например
Turbo C. Не знаю, правда, работает ли под Win 7.

Quote:Можно ли обычному массиву в СИ в качестве размерности передавать переменную?
Нет.

Quote:А вот про СИ... по большей части сбили с толку здесь
Это не обычный массив C.
12.05.2012 22:36
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #308

Для packa - кроме "Turbo C", в голову ничего больше не лезет. Но зачем? В том же Билдере можно создать консольное приложение, и в нём уже работать. Ты напрасно начал изучать C++ в GUI-режиме, а надо было - в консоли. Чем больше ты будешь со старта заморачиваться со всякими "кнопками" и "компонентами" - тем лучше ты будешь знать VCL, но сам C++ ты от этого будешь знать только хуже...

Так что, создавай консольку в Билдере, отключай VCL и радуйся жизни. Дебаггер и сохранение в нём есть, да и прочие вещи тоже необходимы. Панельки для "визуального проектирования" среда сама скроет, так что они мешать не будут.

А вместо заморочек с GUI - ты бы лучше прочёл, к примеру, как раз про #pragma hdrstop. Зря ты её ругаешь - это очень полезная директива. Которая, кстати, даже и в некоторых C-шных компиляторах есть. Но если так уж хочешь - можешь строчку с ней убрать. На работу программы это не повлияет, лишь компиляция может происходить дольше обычного.

packa Wrote:Можно ли обычному массиву в СИ в качестве размерности передавать переменную?
В С++ точно знаю что нет. Онли константы. Сам проверял))
Во многих плюсовых компиляторах прекрасно можно объявлять массивы с переменным размером. Насчёт "чистого С" не помню - но, вроде бы, в C99 это также можно делать.


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
12.05.2012 22:38
Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #309

Quote:В нормальных плюсовых компиляторах прекрасно можно объявлять массивы с переменным размером.
Всмысле? Опытным путем... Как ты и говорил, "Компилятор твой лучший помощник"
Хотя я, наверное, как всегда, криво выразился:
Обычные статические массивы не принимают в размерность переменную.
Ну точно же! Писал что то вроде
int n=5;
int arr[n]; - ошибка!

Quote:Так что, создавай консольку в Билдере, отключай VLC и радуйся жизни.
Первым делом так и сделал, потому что в среде кодинга билдер самая родная вещь Sm))
Там ерунда какая то, так и не разобрался.
Помоги тогда с ним:
1 Создаю "консольный проект" по инструкции http://foreva.susu.ru/for_stud/prog_lang...oject.html
2 На всякий случай ничего не стирая дописываю #include <iostream> - для вывода вроде
3 Ну и начинаю: для проверки printf("HI!");
Ошибки...
Проба #2 cout<< "hi"; тоже самое!

Ошибка: Image: ed3a48984dbet.jpg

Код
Quote:#include <iostream>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
printf("HI!");
    return 0;
}
Зеленым мое, красным то что бы хотел убрать Sm
Кстати, про pragma я знаю что делают, а для чего в скобках у мейн стоит не понял - для чего?


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
(This post was last modified: 12.05.2012 22:56 by packa.)
12.05.2012 22:53
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #310

Я использую MinGW studio, в которой компиллятор gcc со всеми вытекающими. В частности, можешь писать код в блокноте/vim'е/любом другом месте и компилить его из командной строки. а можешь и в мингв писать, там мне ничего не мешало. с прагмами, к примеру, гсс не дружит Bad Ещё, насколько я помню, объявление массива переменной длины зависит от компиллятора и там где смотрел я делать так КРАЙНЕ не рекомендуют. В конце концов, напиши ты new или malloc, всё равно компиллятору придётся это делать за тебя а так ты это контролируешь.
у мейн в скобках - параметры запуска (те которые из командной строки вбиваются или в ярлычке прописываются например) инт это их количество, а следующее, насколько я помню, массив из argc+1 строк, в нулевой из которых содержится полный адрес а дальше - те самые параметры. В некоторых компилерах (вроде борланда) есть ещё третий параметр но я его не помню, лучше гуглить. Я, обычно, шапку пишу int main(void) потому что мне такк привычнее но это всё равно вопрос вкуса. вот.
з.ы. мингв скачать можно с помощью гугла, также могу свою старенькую закинуть куданить на обменник если хочешь.


всё на благо народа
12.05.2012 23:45
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #311

packa Wrote:Ну точно же! Писал что то вроде
int n=5;
int arr[n]; - ошибка!
В борландовском и MS компиляторах действительно будет ошибка - а, к примеру, компилятор GCC прекрасно сработает.

packa Wrote:Помоги тогда с ним:
1 Создаю "консольный проект" по инструкции http://foreva.susu.ru/for_stud/prog_lang...oject.html
2 На всякий случай ничего не стирая дописываю #include <iostream> - для вывода вроде.
Здесь всё правильно. Писать эту строчку желательно выше, чем hdrstop.

packa Wrote:Кстати, про pragma я знаю что делают, а для чего в скобках у мейн стоит не понял - для чего?
Мда Bad
Пакка, срочно купи уже себе хоть какую-нибудь книгу по C++. Потому как функция main - это ну самые основы языка...
Пока можешь на эти параметры просто забить. И удалять их не надо - они что, есть просят?

packa Wrote:Ошибки...
Проба #2 cout<< "hi"; тоже самое!
Ну дык. Функция cout действительно определена в <iostream>, но ведь там она находится в пространстве имён std! Так что, у тебя есть три пути:

1) Писать не cout << "hi!", а std::cout << "hi!". И для всех остальных функций из стандартной библиотеки тоже. И заодно про неймспейсы прочти, это очень простая штука.
2) Написать в начале своего исходника (ниже, чем hdrstop) строчку using namespace std; Всё, после этого твоя запись будет верна. Но не вздумай вставлять эту строчку в h-файлы! Только в cpp-шники, да и то с осторожностью.
3) Инклудить не <iostream>, а <iostream.h> - старую версию файла. Там нет неймспейсов, поэтому твоя предыдущая запись снова будет верна. Но учти, старые файлы есть не во всех компиляторах. Да и не стоит всё же так делать...


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
13.05.2012 11:08
Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #312

Все равно та же ошибка...
Блин, мне срочно нужно тренироваться, ЕГЭ уже очень скоро! Паскаль выучить не успеваю, так что остается перейти с++ на чистый си

1) Не работает, ошибка на том скрине
2) Не работает, ошибка на том скрине
3)
Выходит ошибка не в записи - не синтаксическая, а в чем то другом, чего я не знаю...
Quote:Пакка, срочно купи уже себе хоть какую-нибудь книгу по C++.
Некогда( Кое-как заставил себя забить на с++ и готовиться к экзамену -_-


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
(This post was last modified: 13.05.2012 12:00 by packa.)
13.05.2012 11:57
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #313

Нафига писать std::cout, коли ты уже подал команду "юзать std"? Ну да ладно, на работу программы это не влияет.

Это у тебя Билдер какой-то корявый, поскольку указанные примеры обязаны компилироваться. Либо переставляй его, либо пиши под другим компилятором...


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
13.05.2012 12:58
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #314

Эфрит не указал ещё один вариант которому учили меня - подключать не весь стд а только необходимое:
using std::cout;
насчет аргументов мейна - а оставлять их зачем?
а еще, мне не нравятся эти сини с сяутами Bad наверное потому. что я кучу времени писал на с и привык к принтфосканфам.
а насчёт ошибки - мне бы побольше глянуть а то так не понятно нифига Bad


всё на благо народа
13.05.2012 18:49
Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #315

Quote:а насчёт ошибки - мне бы побольше глянуть а то так не понятно нифига
А что там еще можно разглядеть?
Там просто еще ~100 строчек с "синтаксической ошибкой"

А передать мне нечего =( Т.к. похоже проблема только на моей машине\на моей версии билдера...

Бтв, скачал какую то MinGW studio, запустил, создал проект, вывел hi bro)
Вроде бы все работает (запускать ведь через ф5?)
NIKr0m@nceR, дай связь какую нибудь Sm Или ЛС тебе будет удобнее читать?


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
13.05.2012 19:02
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group