Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    bug1z
    лучше напишите свой код, и переписывайте пока не придет просветление.
    если вы возьмете какой-то реальный проект, то без опыта вы скорей всего не поймете решения которые в нем применены.

    вообще "хорошо спроектированная архитектура" это что-то мифическое.
    когда проект живет уже долго - он состоит из набора устаревающих технологий, компромиссов, клея между плохо стыкующимися частями.
    там не может быть "сути ООП", там будет практика применения ООП, будет может удачная, а может и нет.
    "суть ООП" - это идеал который существует только в голове разработчика, который решает применять ему тот или иной принцип ООП или нет.
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    GoldFinch

    Sad but true.
     
  3. SilentSnowfall

    SilentSnowfall New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2011
    Сообщения:
    27
    Хорошие исходники для чтения из того, что недавно смотрел:
    LyX, POCO, Qt Creator (но тут желательно Qt знать), Chromium (проект достаточно большой и монструозный, но все же).
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    bug1z
    Рекомендую туторы Qt, мне было довольно увлекательно. Ну и Александреску, Элждер, Страуструп.
     
  5. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Ясно, всем спасибо за ответы!
     
  6. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    TurboVision (DOS). Там, правда, с ассемблерными вставками, но есть порты на Win/Linux c "чистым" C++. Сам TV был портирован с Mac, а их "общий предок" послужил основой для OWL/VCL/MFC и проч.
     
  7. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Здравствуйте. У меня следующий вопрос:

    Код (Text):
    1. #include <iostream>
    2.  
    3. struct A
    4. {
    5.     void foo()
    6.     {
    7.         std::cout << "A::foo()\n";
    8.     }
    9. };
    10.  
    11. struct B : A
    12. {
    13.     void foo()
    14.     {
    15.         std::cout << "B::foo()\n";
    16.     }
    17.  
    18.     void foo1()
    19.     {
    20.         std::cout << "B::foo()\n";
    21.     }
    22. };
    23.  
    24. void draw(A &a)
    25. {
    26.     a.foo();
    27. }
    28.  
    29. int main()
    30. {
    31.     B b;
    32.     draw(b);
    33.  
    34.     return 0;
    35. }
    Почему будет вызвана ф-я foo() базового класса, а не производного?
    Есть предположение, что по той причине, что производный класс может и не содержать этой ф-и и по этому мы можем вызывать только ф-и базового класса. Хотелось бы узнать так ли это?

    Спасибо.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Производный то содержит. Но у вас - void draw(A &a), а значит будет вызвана функция А, вот и всё. Если хотите, чтобы была вызывана функция производного, то объявляейте её виртуальной.
     
  9. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Ясно, спасибо большое!
     
  10. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Помогите разобраться есть псевдокод:

    [​IMG]

    Пытаюсь переделать на С++:

    Код (Text):
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. void insertion_sort(int *A, int n);
    5.  
    6. int main()
    7. {
    8.     int A[]={5,2,4,6,1,3};
    9.     const int lengthA = sizeof(A)/sizeof(A[0]);
    10.  
    11.     insertion_sort(A, lengthA);
    12.  
    13.     for(int i = 0; i < lengthA; i++)
    14.         cout << A[i] ;
    15.  
    16.     system("pause");
    17.     return 0;
    18. }
    19.  
    20. void insertion_sort(int *A, int n)
    21. {
    22.   for (int j = 2; j <= n; j++)
    23.   {
    24.     int key = A[j];
    25.     int i = j - 1;
    26.  
    27.         while (i > 0 && A[i] > key)
    28.         {
    29.             A[i+1] = A[i];
    30.             i = i - 1;
    31.         }
    32.  
    33.     A[i+1] = key;
    34.   }
    35. }
    Но при запуске(F5) через MS Visual Studio 2010 вылетает с ошибкой переполнения буфера в С++ новичек помогите понять где ошибка пример взят из книги Алгоритмы. Построение и анализ, 2-ое издание 60 стр. http://progbook.ru/technologiya-programmirovaniya/549-kormen-algoritmy-postroenie-i-analiz.html
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    В таких псевдокодах часто полагают, что индекс первого элемента массива начинается с единицы. В сях же он начинается с нуля, соответственно нужно - int j = 1; j < n; j++, ну и в while проверку не i > 0, а i>=0.
     
  12. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    Booster

    Спасибо теперь ясно :)
     
  13. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    дeнь добрый.
    Подскaжитe пожaлуйстa, кaк получить послeдний символ, зaписaнный в ostream?
    Он вeдь буфeризировaнный, знaчит этот символ должeн гдe то хрaниться, никaк нe нaйду, кaк eго получить.
    Спaсибо.
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Зачем нецелевое использование? Если это нужно - напишите свой stream, который будет делать что вам надо.
     
  15. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    bug1z

    Это не то http://msdn.microsoft.com/en-us/library/ms685032%28v=VS.85%29.aspx ?
     
  16. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Booster,
    проблeмa тaковa: я пeрeгрузил для своeго клaссa опeрaтор ==.
    при cout << my[1] == my[2]

    поскольку операции выполняются слева на право я получаю ошибку.
    для этого я хочу перегрузить == для острима, который возьмет последний символ, сравнит с my[2] и запишет результат.

    p.s api не хотелось бы использовать.
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Операции выполняются согласно приоритету, так что скобки решат вашу проблему.
     
  18. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    дa, это я знaю, просто хотeлось, чтоб было идeaльно :)
     
  19. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Вообще-то это и есть идеальный вариант (скобки). Иначе, ожидаемый эффект операции не будет совпадать с реальным, т.е. получается говнокод.
     
  20. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    239
    Попался пустой деструктор:
    Код (Text):
    1. class PxAllocatorCallback
    2. {
    3. public:
    4.     virtual ~PxAllocatorCallback() {}
    5.     virtual void* allocate(size_t size, const char* typeName, const char* filename, int line) = 0;
    6.     virtual void deallocate(void* ptr) = 0;
    7. };
    Зачем он нужен?
    В дизасме vftable:
    внутри ??_EPxDefaultAllocator@@UAEPAXI@Z вызов собственно деструктора PxDefaultAllocator::~PxDefaultAllocator(void) и delete
    Что за vector deleting destructor такой?
    Как это все работает вообще?