Перейти к содержанию

С/С++ Вопросы и ответы ()


Рекомендуемые сообщения

Тема ппц информативная :D

Ну раз уж так, давайте начнем священные войны

Вот что очень давно хотелось обсудить в круге иммено бурятских сишников:

1. Отличие С от С++. Имеется ввиду не банальное наличие классов/перегрузок/шаблонов, а нечто более существенное: идиомы и средства.

2. STL vs. велосипеды. Что же лучше?

3. Целесообразность следованию современному пути развития языка (STL, Boost, etc)

Ссылка на комментарий

По поводу отличия C от C++

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

C, как инструмент, - это удобный карандаш, который можно хоть узлом завязать. Гибкий и ничего лишнего.

C++ - это тот же карандаш, но со сменными стержнями, с резиночкой и кнопочкой "Вкл/Выкл".

C# - модная ручка. прозрачная, с подсветкой и автоподогревом. Весьма отдаленно напоминает карандаш по форме и удобству.

Pascal - стальной монолитный карандаш. Не пишет.

Добавлено спустя 9 минут 40 секунд:

К вопросу о велосипедах..

Фабричный велик, конечно, новый, смазанный, проверенный и уже есть. Но своя развалюха как-то роднее.

Да и вообще тут аналогия с веловипедом не совсем удачная. Если сдецтва не учился изобретать велосипеды, то никакой программист из тебя не получится. Будешь юзать всю жизнь STL - будешь индийским кодером) Хочешь научиться - сделай сам. А когда научишься сам, то можно не важно уже.

Другое дело - сопровождаемость. Когда прога чужая, то понятно, что не нужно тратить время на поиск ошибок в стандартном векторе.

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

В чем же тогда заключается гибкость? Т.е. получается С++ это красиво обернутый С? Сомневаюсь.

С++ ИМХО настолько популярен не из-за относительно красивой "оболочки", и не наличию ООП, а какраз за счет наличия мощного механизма обобщенного программирования.

Если сдецтва не учился изобретать велосипеды, то никакой программист из тебя не получится

Вот с этим согласен, все должны знать как сделать велик, как он работае и как его использовать. Но вот только изобретать его каждый раз при необходимости, или же писать собственный навечно не имеет смысла. Нет никаких гарантий что ваш не окажется медлительным, ортогональным, с согласованным интерфейсом, а главное безошибочным.

Будешь юзать всю жизнь STL - будешь индийским кодером)

*60 Нет слов

Ссылка на комментарий
В чем же тогда заключается гибкость? Т.е. получается С++ это красиво обернутый С? Сомневаюсь.

С++ ИМХО настолько популярен не из-за относительно красивой "оболочки", и не наличию ООП, а какраз за счет наличия мощного механизма обобщенного программирования.

согласен. не совсем корректно выразился. я имел ввиду, что C++ не потерял в гибкости по сравнению с C.

Хоть C и создавался для написания операционных систем, но в итоге получился удобный язык общего назначения. такойвот глобал пурпос, так сказать. Да. Гибкость и глобал пурпос.

и вообще, тема сложная. есть не просто C и C++, но и история вопроса. Которая начинается на заре Unix.

C вдвое старше меня, и подозреваю, что гуй его красивше чем мой. Дак что я могу про него сказать с точки зрения истории?

Ссылка на комментарий
  • 1 месяц спустя...

Коллеги! Сишники! Давайте обмениватся опытом

Выкладывате сюда итересные статьи, ссылки, может у кого есть полезные библиотеки и библиотечки - расскажите всем о них. Всё что так или иначе относится к языку, кодированию и проектированию всё сюда.

Ссылка на комментарий

Инклуда MULTI 2.6

Написано мной. Используется для быстрого руления тредами. Заточен под Builder. Тоесть использует VCL библиотеки и распараллеливает функции типов:

void __fastcall ( __closure * )(        );
void __fastcall ( __closure * )( void * );
void __fastcall ( __closure * )( bool * );
void __fastcall ( __closure * )( void *, bool * );

Для тех кто не вкурсе - __fastcall это расширения языка, указывающее компилятору на возможность передачи параметров функции не через стек а через регистры.

__closure - это указатель на метод класса. В отличие от предусмотренного стандартом С++ указателя на метод класса, __closure кроме самого адреса метод, хранит еще и адрес экземпляра класса и физически представляет собой структуру, состоящую из двух указателей: на экземпляр класса и на метод класса. Таким образом , __closure практически является указателем не просто метод класса, а на метод объекта (экземпляра) класса. Тоесть __closure указатель может уазывать на метод любого класса.

Так же обеспечена синхронизация с VCL объектами. Тоесть внутри тред-функции можно безопасно обращаться к свойствам и методам VCL классов.

В инклуде имеется класс Multi, методами которого реализуются следующие возможности:

- Запуск функции в треде

- Запуск функции в треде после произвольного семафора

- Запуск функции в треде и установка произвольного семафора после окончания функции

- Запуск последовательности функций в треде

- Собственно прерывание всего этого

интересует?

Ссылка на комментарий

Ага выкладывай. И сразу вопрос вперед: можно ли с помощью этой тулзы в качестве функции потока использовать виртуальную функцию класса без потери полиморфизма и со всеми вытекающими из этого приемуществами?

Ссылка на комментарий
Ага выкладывай. И сразу вопрос вперед: можно ли с помощью этой тулзы в качестве функции потока использовать виртуальную функцию класса без потери полиморфизма и со всеми вытекающими из этого приемуществами?

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

щас выложу на фтп, дам ссылку. а главное - напишу как пользоваться.

Ссылка на комментарий
  • 1 месяц спустя...

В одном из многочисленных споров о том, что лучше Delphi или C++ возникла мысль, что в C++ нету propertys как в Delphi :D. Конечно же это далеко не минус, и миллионы сишников да джавистов по всему миру юзают функции-аксессоры и нисколько от этого не седеют. В последствии некто Albert Braga предложил некоторую идею по реализации этой фишки в виде шаблона.

Итак, посмотрим что из этого вышло.

Идея состоит в том, чтоб использовать шаблон класса, параметризуемый типом "свойства", а также хранящий в себе аксессоры.

В последствии пришлось хранить ещё указатьель на класс, т.к. при вызове функции-члена его нада явно указывать.


class property{
public:
//определение типов для аксессоров
typedef Type (Cls::*getter_t) ();
typedef void (Cls::*setter_t) (Type);

//конструкторы
property(Cls *c, getter_t g):get(g), cls(c) {}
property(Cls *c, setter_t s):set(s), cls(c) {}
property(Cls *c, getter_t g, setter_t s):cls(c), get(g), set(s) {}

//копирующий конструктор
property(const property& other) {
get = other.get;
set = other.set;
}

/*
* оператор присваивания
* используется в случае
* SomeObject.someProperty = SomeValue;
*/
property& operator = (const Type& t) {
(cls->*set)(t);
return (*this);
}

/*
* оператор копирующего присваивания
* используется в случае
* SomeObject.someProperty = OtherObject.otherProperty
*/
property& operator = (const property& o){
get = o.get;
set = o.set;
}

/*
* оператор неявного преобразования
* используется в случае
* someValue = SomeObject.someProperty
*/

operator Type(){
return ((cls->*get)());
}

private:
//конструкто по умолчанию сктрыт, т.к. не может быть свойства без аксессоров
property(){ }

Cls *cls;
getter_t get;
setter_t set;
};
template 

А использовать этот ухос так:


#include

using std::cout;
using std::endl;

class test{
public:
test(): val(property(this, &test::getVal, &test::setVal)), v(12) {
};

property val;

private:
int getVal(){
return v;
}

void setVal(int i){
v = i;
}

int v;
};

int main(void) {
test t;
cout < t.val = 23;
cout <
return 0;
}

Всё хорошо, но вот только инициализация мягко говоря геморная. Есть идея использовать std::mem_fun_ptr или даже boost::bind вместо голых указателей, что теоретически должно упростить клиентам класса его использование.

ЗЫ У кого какие идеи может, чтоб улучшить юзабельность?

Ссылка на комментарий
  • 3 недели спустя...
  • 2 недели спустя...

Помогите пожалуйста решить лабы по с++ желательно в borland c++ for dos

За помощь дам РЕПКИ. Пожалуйста :help::prayer: *49

1.) (Алгоритмизация линейных вычислительных процессов) Определить прибыль от реализации определенного количества некоторого изделия, если известны себестоимость и цена единицы изделия.

2.) (Условные операторы) Можно ли на прямоугольном участке застройки размером ab метров разместить два дома размером в плане pq, rs метров? Дома можно располагать только параллельно сторонам участка.

3.) (Операторы цикла.) Поменять местами значения целых переменных x и y, не используя дополнительные переменные.

4.) (Массивы целых чисел. Матрицы.) Написать программу транспонирования матрицы.

5.) (Символьные массивы. Строки.) Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами - запятая, за последним словом - точка. Напечатать:

а) эту же последовательность слов, но в обратном порядке;

б) эту же последовательность слов, но удалив из нее повторные вхождения слов;

Ссылка на комментарий
Помогите пожалуйста решить лабы по с++ ...

так и скажи "напишите за меня". а помогите - это когда что-то конкретно непонятно.

делать чтото за когото неинтересно. помочь - можно.

Ссылка на комментарий
  • 2 месяца спустя...
  • 5 недель спустя...
  • 1 месяц спустя...

блин давно задача 3 была.но просто написать охота обмен местами двух переменных без использования третий так вот:

x=x^y;

y=x^y;

x=x^y;

мне такой алгоритм нравится пц. и работает быстро)))

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

зачем человеку, желающиму изучать Си++, изучать Си? Чтобы еще один человек писал смесью Си и Си++? Не забывайте, что языки разные....

Ссылка на комментарий
блин давно задача 3 была.но просто написать охота обмен местами двух переменных без использования третий так вот:

x=x^y;

y=x^y;

x=x^y;

мне такой алгоритм нравится пц. и работает быстро)))

ну вот тогда тебе еще один способ:

x=x+y;

y=x-y;

x=x-y;

зачем человеку, желающиму изучать Си++, изучать Си? Чтобы еще один человек писал смесью Си и Си++? Не забывайте, что языки разные....

Да кончено языки разные, но не вижу ничего плохого в изучении Си для начала. Думаю большинство именно так и поступает. Изучить Си, хотябы основы, а затем при переходе к Си++ почувствовать всю его мощь и гибкость.

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...