1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

С++ модификаторы доступа

Тема в разделе "Программирование", создана пользователем gerodoth, 12.10.16.

  1. sema

    sema Активный участник

    16.034
    1.757
    А разве * и & не отдельные операторы (что-то типа разыменования)?

    Что *a, что a[] - результат одинаков. С a[] в ногу чуть сложнее выстрелить.

    На сайзоф (а) я бы сказал ;)

    В плюсах то со стрингами? Для стрингов перл помоему & греп, сед, аск всю жизнь были. А в сях строки это тот еще гимор. Начиная с того что там есть несколько типов строк (нуль терминайтет, с длинной строки в нулевом байте как в паскакале и так далее)...

    Зато какой ...

    gerodoth, если тяжко с чарами - попробуй с интами. Бери обычный массив ну пусть будет

    #define N 10
    unsigned int a[]=new int[N];
    for(int i=0;i<N;i++)a=N;
    и вперед. А потом уже и указатель на массив указателей можно будет оформлять.

    Это не спортивно. Пусть в уме решает (я ideone.com юзаю)

    Указатель не должен быть никакого типа в этом и фишечка. Указатель [как переменная] это адрес ячейки памяти. void *a и вперед. хочешь cout<<(int*)a, хочешь cout<<(char*)a - тут самое главное ногу не прострелить ;)
    Я по большей степени безплюсонасильник, там со сканфами и принтфами по началу чуть сложнее, а затем легче.

    А бывают не восьмибитные байты? Кстати даже short int это помоему 16 бит в х86 архитектуре, а целое 0-255 я даже и не припомню с ходу такой тип. в паскакале помоему какой-то интеджер был
    (byte 0…255 1 как гугол подсказывает)

    Может.
    Нет, все верно. Мы сам указатель (адрес ячейки памяти) увеличиваем на два, так как указатель на строку и указатель на символ - это указатель на ячейку памяти (в первом случае не понятно какой длинный будет строка но это специально, что бы легче было ногу прострелить; во втором случае строка длинной 1 символ) - получается *(k+2)=k[2]. Ну и я бы для надежности string * k = "hello\x0" бы сделал.
    "Не все так однозначно"
    Указатель на строку всё-таки не равен указателю на массив указателей.
    string **str_ptr=new *string[3];
    str_ptr[0]=*string="hello\x0";
    str_ptr[1]=*string="the\x0";
    str_ptr[2]=*string="world\x0";
    как-то так
    пс: куда мы катимся.... консультации по обучению сям на форуме... там где онлайн лекции преподавателю вопросы нельзя задавать?
     
    Последнее редактирование: 14.10.16
  2. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    жалко его, я его по текущим темам так гружу что он злиться начинает а иногда перестает отвечать. человек по 50 на вебинарах, а все молчат, один я гружу.
    ну и он странный, 6ю пару подряд рассказывает про память, указатели, указатели на указатели, без примеров применения опять же это непонятно сходу зачем.
    мол 2 системы именования переменных - по имени переменной и по указателю. плюс указателя тем что ему можно тип менять - ну дак описали б в языке что переменной можно тип менять и не грузились бы так. сами создали проблему, сами решили - ай красавцы.
     
  3. sema

    sema Активный участник

    16.034
    1.757
    Как я его понимаю. Тут в соседней теме один столько вопросов задает что вчетвером отвечать не успеваем.
    Такая методология преподавания. Этим си и силен. Плюс это тру теория, её иногда надо просто выучить и запомнить, не особо вникая, если вникалка слабая.
    Это называется преобразование типов - оно есть во многих языках. Но все языки разные - гибкая работа с памятью - сила си. На си даже на контроллеры можно писать прошивки и код чуть менее эффективнее ассемблера.
    Да не было никакой проблемы.
     
  4. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    а вот про контроллеры может пригодиться, полезно.
    я тут недавно стал в питон лезть, товарищ что мне питон когда рекламировал говорил что тот си-подобный. а поуглублявшись и решив что пора практиковаться выяснил что питон под винду компилировать не особо то и принято, он в консоли силен, а для тех целей мне повершела с цмд хватало. и у меня винда везде, на работе из-за 1с, дома из-за проприетарных железок. хотя поначалу питон попроще си, но тут начали курс читать, дай, думаю, в си полезу. пока лезу не особо понимаю зачем, с окошками что-то могу на лазарусе накидать, с консолью тоже дружу, а вот контроллеры могут пригодиться.
     
  5. sema

    sema Активный участник

    16.034
    1.757
    Питон - интерпретатор. Хотя тоже сильный язык.
    А вот такое на питоне смогёшь?
     

    Вложения:

  6. Redrik

    Redrik Активный участник

    13.986
    5
    Дык... вроде нет.
    Вроде это особый тип данных - указатели
    Прикольно например использовать конструкцию что-то типа
    short int *a = {\x33, \x31, \x32, \x33, \x34, \x35 \ x00} ;
    cout << (char *) a ;
    // за синтаксис не ручаюсь - давно такой бадягой не пользовался

    Таки стреляет.
    Падла. :(:(:(

    Пробовал.
    Получается :(:(

    Ну не стал я городить огород. Зачем новичку сайзофы ? нью,, алоки/малоки, конструкторы/деструкторы.
    Хотя ничего в них сложного ни разу. Но когда в голове громоздится каша - это не есть гуманно.
    Так и хочется сишных авторов библиотек аннигилировать.
    Единственная реализация С++ это Qt где со строками (стрингами) работать не настолько мозговыносяще, как в других реализациях.
    Но Кют в среде просвещенной программистской интеллигенцией идет за западло.
    Среда для поделок
    Ему конкретную задачку надо решить.
    Вот он с чарами и заморочился.
    Тык он не в спортшколе, а в началке. Ему втукнуть надо в синтаксис языка и привыкнуть к нему.
    Онлайн тренажоры самое то. Ну чтоб не заморачиваться себе собственный десктоп не ставить бормана или еще какого визуал шарпа.
    Ты заметил :d:d:d
    Специально такую конструкцию написал. :d:d:d Чтоб доходчивее было.
    Да они (разработчики языков) - задолбали уже.
    В зависимости от архитектуры процессора одни и те же переменные имеют разные сайзоффы.
    Напишешь для одного - все путем. На другой платформе - не работает. И начинаются (цуко!!!) танцы с бубнами.
    Одно дело когда ты пишешь и косяки сразу же видны по ходу написания.
    Другое - когда прога уже написана - вот тогда отыскать косяк - сущий гемор. Особенно, если он неочевидный.
    Эт если оператор "=" перегружен. Но не факт.
    Хотя.... в последнее время, наверняка уже все библиотеки этот оператор перегрузили.
    Убедил. Теоретически НЕ может, в реальности - таки да.
    Хм..... чето-то тут не так ;)
     
  7. gerodoth

    gerodoth Активный участник

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

    сайзофы были в начале в обоих курсах


    в 1с отладкой удобно, я прям привык уже к ней почти.
     
  8. RubiN

    RubiN Активный участник

    6.629
    425
  9. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    про наследование классов
    допустим создаем класс с двумя родителями. создаем объект класса. память выделается под объекты всех трех классов? не накладно?
     
  10. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    #include <iostream>
    using namespace std;
    class A{
    public:
    int x;
    A(int x){this->x=x/2;}
    A(A &p){p.x = 4; x=1;}
    };
    int main() {
    A p1(4);
    cout<<p1.x;
    }
    еще задачка, переписал, откомпилировал, но смысла не понял.
    что эта строка делает? A(A &p){p.x = 4; x=1;}
     
  11. Capitan Alex

    Capitan Alex Активный участник

    7.472
    77
    Ну насколько я помню со своими остаточными знаниями, то у класса здесь два конструктора. Первый запускается, когда конструктору передаётся число типа int, второй запускается если конструктору передаётся объект типа A.

    A p1(10); // запускается конструктор 1
    A p2(p1); // запускается конструктор 2

    Соответственно эта строка свойству х объекта p1 присваивает 4, а свойству x объекта p2 присваивает 1.
    В примере, как он указан выше, данный конструктор № 2 действительно ничего не делает, но для чего он в принципе может понадобиться я объяснил выше.

    По-моему так, хотя может я и ошибаюсь, давно всё это изучал.
     
    Последнее редактирование: 19.10.16
  12. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    вроде да, попалась потом похожая
    косяк задач в том что они на время, секунд 10-15 дается, текст не скопировать и неправильные ответы не разбираются, существенный минус как по мне. я их скриню и переписываю потом.
    а иногда вроде ответ знаешь, а не правильный, а текст задачи не вспомнишь. неудобно таки.
     
  13. sema

    sema Активный участник

    16.034
    1.757
    Это не задач косяк. А образованию по этим вашим видеолекциям и прочим вебинарам.
     
  14. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    может и так
    лектора я попытался понапрягать вчера, лекции по средам, он прям нервничает, похоже трогать его не стоит, придется вас.

    #include <iostream>
    using namespace std;
    template <class T>
    void f(T){
    static int i=0;
    cout <<++i;
    }
    int main(){
    f(1);
    f(1.0);
    f(1);
    }
    почему возвращается 112? почему 2 в конце?

    ---------- Сообщение добавлено 20.10.2016 17:40 ----------

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

    Дмитрий Н Активный участник

    2.120
    396
    Шаблонная функция f() по по факту будет скомпилирована в две функции:
    void f(int);
    void f(float);
    В main() два раза вызывается f(int), поэтому второй раз 2 в консоли...
     
  16. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    а гипотетически если объявить константой число, а потом через указатель численного типа попробовать его поменять - получится?
     
  17. Дмитрий Н

    Дмитрий Н Активный участник

    2.120
    396
    Не обязательно гипотетически, можно на живую - следующий код, если я правильно понял условие выше, будет выбрасывать обшибку, вполне ожидаемую:

     
  18. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    идея не показывать что указатель на постоянную
     
  19. Дмитрий Н

    Дмитрий Н Активный участник

    2.120
    396
    Плохая идея, язык C/C++ сильно типизирован, т.о. компилятор ругнётся на несоответствие типов указателя и переменной :) .
     
  20. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    еще мутный пример

    #include <iostream>
    using namespace std;

    int &func()
    {
    static int x=3;
    return x;
    }
    int main(){
    func()=8;
    cout<<func();
    }

    функции без параметров присваивается число, как это?

    ---------- Сообщение добавлено 22.10.2016 18:45 ----------

    на память оставлю, ниче не понял
    #include <iostream>
    using namespace std;

    class X{
    private:
    int x,y;
    public:
    X():x(0),y(0){}
    void show(){cout<<x<<y;}
    X& operator()(int dx, int dy){
    x=dx-1;
    y=dy+1;
    return *this;
    }
    };
    int main(){
    X pt;
    pt(3,2);
    pt.show();
    }
     
  21. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    #include <iostream>
    using namespace std;

    class A{
    public:
    void f(){cout<<1;}
    };
    class B: public A{
    private:
    void f(){cout<<2;}
    };
    void c(A &a){a.f();}
    int main(){
    B b;
    c(b);
    }

    вкурил как работает, но блин за 15 секунд я такое не успеваю сообразить
     
  22. HELL'o

    HELL'o Активный участник

    5.125
    240
    пытаюсь понять эту фразу уже 2 минуты.
    И да, правильно отметили, это интерпретатор.
     
  23. colorprint

    colorprint Активный участник

    19.654
    51
    может имелась ввиду сборка интерпретатора? :d
     
  24. sema

    sema Активный участник

    16.034
    1.757
    Вроде как умеет код генерить, те если одно и тоже интерпертировать - может раз "заготовку сделать" а потом уже ей быстренько результаты выдавать. Как то так "на пальцах" объясняли.
    https://pythonworld.ru/osnovy/program-compilation-with-cx-freeze.html
     
  25. HELL'o

    HELL'o Активный участник

    5.125
    240
    можете что конкретное в виде задания сформулировать, кроме сетей? Тоже почитываю книжку, но пока кроме примеров из книги ничего толком не делала.
     
  26. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    по питону? и без сетей? а смысл?
     
  27. pm

    pm Активный участник

    787
    0
    gerodoth, не пытайся выучить C++ самостоятельно. Лучше книгу прочти. Кнута и Страуструпа.
     
  28. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    pm, я и не самостоятельно, мне лекции читают, но редко, только по средам