Можно ли научиться программированию самостоятельно,по книгам? (подскажите самый легкий язык которому можно научиться и полезную литер)

Модератор: Модераторы разделов

alex1974
Сообщения: 5

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение alex1974 »

спасибо вам всем за комменты!!!читал с интересом...сделал определенные выводы,ищу подходящую литературу...вот найти только сложновато,нужное..я ведь абсолютно в этом ничего не понимаю..полный ноль...
Спасибо сказали:
Аватара пользователя
Clear_Mind
Сообщения: 241
Статус: Изредко заглядывающий
ОС: openSuSE 11.1

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение Clear_Mind »

Ну началось :blink:
Любят люди поразглагольствовать.
я сам выучил С++ по книге Страуструпа. :)
Bombers launch with no recall + Minutes warning of the missile fall
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение oav »

Clear_Mind писал(а):
19.10.2006 14:25
Ну началось :blink:
Любят люди поразглагольствовать.
я сам выучил С++ по книге Страуструпа. :)

Везет, поздравляю! Я вот сколько не пытаюсь - все равно не выходит, постоянно какие-то непонятные вещи нахожу :(
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

oav писал(а):
19.10.2006 15:42
Везет, поздравляю! Я вот сколько не пытаюсь - все равно не выходит, постоянно какие-то непонятные вещи нахожу :(

дык есть же Лафоре

у него прекрасная книга
Спасибо сказали:
Аватара пользователя
Ballantre
Сообщения: 114
ОС: Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение Ballantre »

А еще есть Дейтел. И Прата. На мой взгляд, - самые полезные книги для учебы.
Я двадцать лет знал его и всегда ненавидел, и всегда восхищался, и всегда по-рабски боялся его.
Спасибо сказали:
Заусениц
Сообщения: 69
ОС: BSD|Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение Заусениц »

Что бы выучить по книге, книгу мало читать. Нужно что бы в книге были хорошие задачи, а задачи нужно решать. А еще нужно знать для чего учишь и хотеть выучить. Иначе полученые знания будут благополучно забыты.
Спасибо сказали:
Аватара пользователя
Ballantre
Сообщения: 114
ОС: Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение Ballantre »

Не знаю как в большинстве книг, но у Дейтела есть много очень хороших примеров, по которым реально можно понять именно идеологию языка. Причем не только С++, но и многих других, ведь Дейтел - автор активный.
Я двадцать лет знал его и всегда ненавидел, и всегда восхищался, и всегда по-рабски боялся его.
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

Ballantre писал(а):
19.10.2006 23:05
Не знаю как в большинстве книг, но у Дейтела есть много очень хороших примеров, по которым реально можно понять именно идеологию языка.

ну в Лафоре тоже примеры есть, так же, как и упражнения

но к своему стыду Дейтела не читал...
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение elide »

- Везет, поздравляю! Я вот сколько не пытаюсь - все равно не выходит, постоянно какие-то непонятные вещи нахожу
- дык есть же Лафоре, у него прекрасная книга
вы так ничего и не поняли, да?
ну да ладно...
хотя..... /me взглянул на свое поколение с еще большей печалью....
слава роботам!
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

elide писал(а):
19.10.2006 23:47
- Везет, поздравляю! Я вот сколько не пытаюсь - все равно не выходит, постоянно какие-то непонятные вещи нахожу
- дык есть же Лафоре, у него прекрасная книга
вы так ничего и не поняли, да?
ну да ладно...
хотя..... /me взглянул на свое поколение с еще большей печалью....

а почему Вы так говорите?

а у Вас какое мнение насчет Лафоре?
поверьте, мне интересно послушать мнение знающего человека
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение elide »

He1mut, скажи мне пожалуйста, что делает вот такой вот код на С++, как его можно было бы использовать

Код: Выделить всё

struct A {
   A(const volatile void**);
};
char f(A);
int f(...);

template <typename T> struct WTF {
   static const int _ = (sizeof(f(*(T*)0))==sizeof(char));
};
слава роботам!
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

elide писал(а):
20.10.2006 01:06
He1mut, скажи мне пожалуйста, что делает вот такой вот код на С++, как его можно было бы использовать

Код: Выделить всё

struct A {
   A(const volatile void**);
};
char f(A);
int f(...);

template <typename T> struct WTF {
   static const int _ = (sizeof(f(*(T*)0))==sizeof(char));
};

Matt Marcus рулит! Баян!!!

Кстати, вразумительного ответа на эту задачку дать не смог. Могу только предположить, что код сравнивает тип аргумента WTF с типом A.
В любом случае хочется услышать вразумительный ответ.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение elide »

мне просто думать было лень. написал первое вспомнившееся. но, хоть и баян, а на вопрос ты так и не ответил.......

это ответ на твой вопрос:
когда oav, владеющий С++ много лучше, чем кто-либо из засветившихся на этом форуме, говорит, что постоянно находит в этом языке что-то новое, удивительное и даже непонятное, то советовать прочитать "прекрасную книгу" Лафоре и все понять - крайне глупо.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...
вот ты прочитал прекрасную книгу... и что?

ладно, засчитав тебе -1 очко, вопрос с определением имеет ли тип T A своим предком закроем.
вот тебе совсем элементарный вопрос (он мало того, что крайне прост, так еще и рассмотрен практически в каждой книжке):

Код: Выделить всё

int i = 0;
cout << ++i << ++i << ++i << endl;
совсем простой код, правда?
вот что он _должен_ делать, а что он _на самом деле_ делает. и почему, ага. это классика.
а вообще, если тебе когда-нибудь покажется, что ты знаешь с++, приходи (:
я знаю, как это лечить.....
слава роботам!
Спасибо сказали:
Аватара пользователя
edoc_modnar
Бывший модератор
Сообщения: 1638
Статус: Форум больше не посещаю

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение edoc_modnar »

elide
Вот поэтому я всеми фибрами своей жалкой человеческой душонки ненавижу этот езыг (:
So long, and thanks for all the fish.
Douglas Adams, The Hitchhiker's Guide to the Galaxy
Спасибо сказали:
Аватара пользователя
n2j2r
Сообщения: 494
Статус: najar

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение n2j2r »

elide писал(а):
20.10.2006 03:09
вот тебе совсем элементарный вопрос (он мало того, что крайне прост, так еще и рассмотрен практически в каждой книжке):

Код: Выделить всё

int i = 0;
cout << ++i << ++i << ++i << endl;
совсем простой код, правда?
вот что он _должен_ делать, а что он _на самом деле_ делает. и почему, ага. это классика.
а вообще, если тебе когда-нибудь покажется, что ты знаешь с++, приходи (:
я знаю, как это лечить.....

как и показалось на первый взгляд выводит 123...
в чем подвох?
Спасибо сказали:
iAm
Сообщения: 220
ОС: Gentoo

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение iAm »

alex1974, конечно можно. Только не просто читать книгу и запоминать все - не получится. Это что учить иностранный язык - можно прочитать весь самоучитель и запоминать все слова по ходу чтения, которые потом один черт забудешь, а можно изучить грамматику и пойти читать какую-нибудь книжку (жанр уже на свой вкус), или на форумах общаться на изучаемом языке - повторяемость употребляемых слов заставляет волей-неволей запоминать слова.

Если перевести аналогии с живого языка на язык программирования, то нужно заучить "грамматику", т.е. элементарные основы. Затем поставить цель (локальныую), например, написать простую программу. Естесственно ее разделив мысленно на блоки и записав на листочке (так проще понять что нужно сделать и что уже сделано). А потом думаете уже, как сделать этот блок, а потом воооон тот еще. :)

Начинал я с PHP - очень простой язык (замечу, я не профессиональный программист). Правда при переходе на C++ меня очень и очень жутко бесило жесткое определение типа переменной (хотя я и понимал, что это правильно и так и должно быть).
Т.е. на PHP можно было написать так:

Код: Выделить всё


$my_varuable = 3;
$my_varuable = "Hello, World";

на C++ (да и на Pascal) так сделать нельзя (насколько мне известно). ;)
Спасибо сказали:
Аватара пользователя
rolano
Сообщения: 845
Статус: еще один юзер FreeBSD
ОС: какая-то

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение rolano »

2 elide
Можно, наверное, найти и более DZENствующие примеры, но дело ведь в том, что такие жонглирования нужны далеко не всем. Человек учит этот гребаный язык не для того, чтобы потом пребывать в Нирване, а чтобы решать конкретные задачи. И если ему надо будет определить наличие "родственных" отношений между типами, то при приложении должных усилий он обязательно найдет решение. В голове закрепляется то, что востребовано, а не то, что прочитано.
Я знаю только то, что ничего не знаю ... потому и обречен вечно учиться.
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

elide
Вы уж простите меня, но ни в одном из своих постов я не писал, что знаю С++. По-моему, всем тут известно, что в нем я полный ламер.
Более того, забаньте меня, если найдете ссылку хоть на одно сообщение, в котором я умничаю или косвенно намекаю на то, что знаю С++.
Кто говорил, что я прочитал всего Лафоре?
Лафоре я читаю, стараюсь все повнимательнее изучать. Тем паче, преподаватели рекомендуют этот учебник. Так же там описываются самые азы программирования на С++. И это мое мнение. Таким образом, почему бы мне не выразить свое ИМХО? Мне, как новичку, все понятно в нем по мере изучения. Вот я и хочу, чтобы мое мнение, как многих других выслушали, а затем приобрели только ту литературу, которая, по их мнению, действительно УЧИТ программированию.
Так что Вы далеко не правы.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...

Вы уж извините, а вот это действительно очень обидно. Когда я такое говорил? Почему Вы так грубите?

Код: Выделить всё

int i = 0;
cout << ++i << ++i << ++i << endl;

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

Но вот какая петрушка:

Код: Выделить всё

he1mut@debian:~$ cat code.cpp
#include <iostream>
using namespace std;
int main()
{
  int i = 0;
  cout << ++i << ++i << ++i << endl;
  return 0;
}
he1mut@debian:~$ g++ code.cpp -o test
he1mut@debian:~$ ./test
333
he1mut@debian:~$

Вот Вы программист. Дык расскажите, пожалуйста, о таком поведении программы.
Может быть, тут что-то связано с тем, что операция ++ имеет высокий приоритет, и выполняется справа налево???
Спасибо сказали:
Аватара пользователя
rolano
Сообщения: 845
Статус: еще один юзер FreeBSD
ОС: какая-то

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение rolano »

в Визуал Си++ 6.0. Консольный проект.

#include "stdafx.h"
#include <iostream.h>


int main(int argc, char* argv[])
{
int i = 0;
cout << ++i << ++i << ++i << endl;
return 0;
}


Результат:
321

Складывается мнение, что тут не трабла языка, а трабла конкретной реализации.
Я знаю только то, что ничего не знаю ... потому и обречен вечно учиться.
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

О! УРА!
Все-таки дело действительно в приоритете операций. Вот так все работает:

Код: Выделить всё

int i = 0;
cout << ++i << endl;
cout << ++i << endl;
cout << ++i << endl;


Вот так выводит 1 2 3 :)))
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение Hvzh »

He1mut писал(а):
20.10.2006 11:01
О! УРА!
Все-таки дело действительно в приоритете операций. Вот так все работает:

Код: Выделить всё

int i = 0;
cout << ++i << endl;
cout << ++i << endl;
cout << ++i << endl;


Вот так выводит 1 2 3 :)))

А должно быть
1
2
3
:D
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

Hvzh писал(а):
20.10.2006 11:19
А должно быть
1
2
3
:D

:)))))))))
А я суть хотел сказать. Естественно,

Код: Выделить всё

he1mut@debian:~$ ./test
1
2
3

:)


rolano писал(а):
20.10.2006 11:01
в Визуал Си++ 6.0. Консольный проект.

#include "stdafx.h"
#include <iostream.h>


int main(int argc, char* argv[])
{
int i = 0;
cout << ++i << ++i << ++i << endl;
return 0;
}


Результат:
321

Складывается мнение, что тут не трабла языка, а трабла конкретной реализации.

Хммм. Странно.
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение v04bvs »

He1mut писал(а):
20.10.2006 10:34
elide
Вы уж простите меня, но ни в одном из своих постов я не писал, что знаю С++. По-моему, всем тут известно, что в нем я полный ламер.
Более того, забаньте меня, если найдете ссылку хоть на одно сообщение, в котором я умничаю или косвенно намекаю на то, что знаю С++.
Кто говорил, что я прочитал всего Лафоре?
Лафоре я читаю, стараюсь все повнимательнее изучать. Тем паче, преподаватели рекомендуют этот учебник. Так же там описываются самые азы программирования на С++. И это мое мнение. Таким образом, почему бы мне не выразить свое ИМХО? Мне, как новичку, все понятно в нем по мере изучения. Вот я и хочу, чтобы мое мнение, как многих других выслушали, а затем приобрели только ту литературу, которая, по их мнению, действительно УЧИТ программированию.
Так что Вы далеко не правы.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...

Вы уж извините, а вот это действительно очень обидно. Когда я такое говорил? Почему Вы так грубите?

Код: Выделить всё

int i = 0;
cout << ++i << ++i << ++i << endl;

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

Но вот какая петрушка:

Код: Выделить всё

he1mut@debian:~$ cat code.cpp
#include <iostream>
using namespace std;
int main()
{
  int i = 0;
  cout << ++i << ++i << ++i << endl;
  return 0;
}
he1mut@debian:~$ g++ code.cpp -o test
he1mut@debian:~$ ./test
333
he1mut@debian:~$

Вот Вы программист. Дык расскажите, пожалуйста, о таком поведении программы.
Может быть, тут что-то связано с тем, что операция ++ имеет высокий приоритет, и выполняется справа налево???

Потому что порядок вычисления аргуметов при вызове функции (а << это вызов функции) неопределён. И компилятор в данном случае решает, что лучше их вычислять не слева направо, а справа налево. Вот пример, который это иллюстрирует:

Код: Выделить всё

#include "stdafx.h"
#include <iostream>

class A
{
public:
    A(int x) : x_(x) { }

    A& inc() {
    std::cerr << "A::inc(), x = " << x_ << "\n";
    ++x_;
    return *this;
    }

    int getX() const { return x_; }

private:
    int x_;

};

std::ostream& my_out(std::ostream &s, const A &a)
{
    std::cerr << "my_out(stream, " << a.getX() << ")\n";
    return s;
}

int main()
{
    A i(0);

    my_out(my_out(my_out(std::cout, i.inc()), i.inc()), i.inc());

    return 0;
}


Его вывод:

Код: Выделить всё

A::inc(), x = 0
A::inc(), x = 1
A::inc(), x = 2
my_out(stream, 3)
my_out(stream, 3)
my_out(stream, 3)


В принципе нельзя сказать, что это точная иллюстрация происходящего, но смысл тот же.
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

v04bvs
Спасибо огромное за разъяснения!

Буду продолжать изучать язык :)
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение Hvzh »

v04bvs писал(а):
20.10.2006 11:29
He1mut писал(а):
20.10.2006 10:34

elide
Вы уж простите меня, но ни в одном из своих постов я не писал, что знаю С++. По-моему, всем тут известно, что в нем я полный ламер.
Более того, забаньте меня, если найдете ссылку хоть на одно сообщение, в котором я умничаю или косвенно намекаю на то, что знаю С++.
Кто говорил, что я прочитал всего Лафоре?
Лафоре я читаю, стараюсь все повнимательнее изучать. Тем паче, преподаватели рекомендуют этот учебник. Так же там описываются самые азы программирования на С++. И это мое мнение. Таким образом, почему бы мне не выразить свое ИМХО? Мне, как новичку, все понятно в нем по мере изучения. Вот я и хочу, чтобы мое мнение, как многих других выслушали, а затем приобрели только ту литературу, которая, по их мнению, действительно УЧИТ программированию.
Так что Вы далеко не правы.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...

Вы уж извините, а вот это действительно очень обидно. Когда я такое говорил? Почему Вы так грубите?

Код: Выделить всё

int i = 0;
cout << ++i << ++i << ++i << endl;

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

Но вот какая петрушка:

Код: Выделить всё

he1mut@debian:~$ cat code.cpp
#include <iostream>
using namespace std;
int main()
{
  int i = 0;
  cout << ++i << ++i << ++i << endl;
  return 0;
}
he1mut@debian:~$ g++ code.cpp -o test
he1mut@debian:~$ ./test
333
he1mut@debian:~$

Вот Вы программист. Дык расскажите, пожалуйста, о таком поведении программы.
Может быть, тут что-то связано с тем, что операция ++ имеет высокий приоритет, и выполняется справа налево???

Потому что порядок вычисления аргуметов при вызове функции (а << это вызов функции) неопределён. И компилятор в данном случае решает, что лучше их вычислять не слева направо, а справа налево. Вот пример, который это иллюстрирует:

Код: Выделить всё

#include "stdafx.h"
#include <iostream>

class A
{
public:
    A(int x) : x_(x) { }

    A& inc() {
    std::cerr << "A::inc(), x = " << x_ << "\n";
    ++x_;
    return *this;
    }

    int getX() const { return x_; }

private:
    int x_;

};

std::ostream& my_out(std::ostream &s, const A &a)
{
    std::cerr << "my_out(stream, " << a.getX() << ")\n";
    return s;
}

int main()
{
    A i(0);

    my_out(my_out(my_out(std::cout, i.inc()), i.inc()), i.inc());

    return 0;
}


Его вывод:

Код: Выделить всё

A::inc(), x = 0
A::inc(), x = 1
A::inc(), x = 2
my_out(stream, 3)
my_out(stream, 3)
my_out(stream, 3)


В принципе нельзя сказать, что это точная иллюстрация происходящего, но смысл тот же.


Если в Вашем коде поменять ++x_ на x_++, вывод Вашего примера не изменяется, но если поменять в примере He1mut'а ++i на i++, то вывод будет 210. Как Вы это объясните?
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Аватара пользователя
rolano
Сообщения: 845
Статус: еще один юзер FreeBSD
ОС: какая-то

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение rolano »

Если рассматривать << как вызов функции, то как именно можно предстваить конструкцию cout << ++i << ++i << ++i << endl;? Я имею в виду разложить эту сложную конструкцию на простые, выраженные через <<.
Вроде того как
int func1 (int param)
...
int func2 (int param)

int main ()
{
int result = func1(func2(/*аргумент*/));
return 0;
}

func1(func2(/*аргумент*/)) при этом представляется (может быть представлена) как
<временная переменая> = func1(/*аргумент*/);
int result = func2(<временная переменая>);


P.S. Приведенный в предудыщем посте пример с консольным проектом в Визуал Студио 6.0 был апробирован во Фре 5.3 и скомпилен g++ 3.4.2. Вывод: 321.
Я знаю только то, что ничего не знаю ... потому и обречен вечно учиться.
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение oav »

[quote name='elide' post='267175' date='Oct 20 2006, в 01:06']
He1mut, скажи мне пожалуйста, что делает вот такой вот код на С++, как его можно было бы использовать

Код: Выделить всё

struct A {
   A(const volatile void**);
};
char f(A);
int f(...);

template <typename T> struct WTF {
   static const int _ = (sizeof(f(*(T*)0))==sizeof(char));
};

[quote]

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

Код: Выделить всё

template<typename T>
void DoSomething()
{
    bool is_T_A = WTF<T>::_ == 1;
}

зы. если я понял правельно то int надо на bool сменить.

Только зачем писать такой качмар чтобы проверить что T конверсируется в А? Но тогда это не совсем правельный код ;).

Вообще-то type traits делаются более общими- is_class,is_pod,is_function_pointer..etc.
Короче если привести это к более читабельному виду то:

Код: Выделить всё

template <class T, class U>
class Conversion
{
       typedef char Small;
       class Big { char dummy[2]; };
       static Small Test(U);

       static Big Test(...);
       static T MakeT();

           enum { sameType = false };
public:
       enum { exists = sizeof(Test(MakeT())) == sizeof(Small) };
};
template <class T>
class Conversion<T, T>
{
public:
       enum { exists = 1, sameType = 1 };
};
#define SUPERSUBCLASS(T, U) \
   (Conversion<const U*, const T*>::exists && \
   !Conversion<const T*, const void*>::sameType)


макрос SUPERSUBCLASS говорит наследует ли тип U от T или это одинаковые типы.

использование:

Код: Выделить всё

int main()
{
using namespace std;
cout
<< Conversion<double, int>::exists << ' '
<< Conversion<char, char*>::exists << ' '
<< Conversion<size_t, vector<int> >::exists << ' ';
}

(из александреску)



[quote][quote name='v04bvs' date='Oct 20 2006, в 11:29' post='267356']
Потому что порядок вычисления аргуметов при вызове функции (а << это вызов функции) неопределён. И компилятор в данном случае решает, что лучше их вычислять не слева направо, а справа налево. Вот пример, который это иллюстрирует:

Код: Выделить всё

#include "stdafx.h"
#include <iostream>

class A
{
public:
    A(int x) : x_(x) { }

    A& inc() {
    std::cerr << "A::inc(), x = " << x_ << "\n";
    ++x_;
    return *this;
    }

    int getX() const { return x_; }

private:
    int x_;

};

std::ostream& my_out(std::ostream &s, const A &a)
{
    std::cerr << "my_out(stream, " << a.getX() << ")\n";
    return s;
}

int main()
{
    A i(0);

    my_out(my_out(my_out(std::cout, i.inc()), i.inc()), i.inc());

    return 0;
}


Его вывод:

Код: Выделить всё

A::inc(), x = 0
A::inc(), x = 1
A::inc(), x = 2
my_out(stream, 3)
my_out(stream, 3)
my_out(stream, 3)


В принципе нельзя сказать, что это точная иллюстрация происходящего, но смысл тот же.
[quote]

ну можно точно цитатой:

[quote]Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual
expressions, and the order in which side effects take place, is unspecified.54) Between the previous
and next sequence point a scalar object shall have its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full
expression; otherwise the behavior is undefined. [Example:
i = v[i++]; //the behavior is undefined |
i = 7, i++, i++; // i becomes 9
i = ++i + 1; // the behavior is undefined |
i = i + 1; //the value of i is incremented[quote]
(инетересное жирным)
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение elide »

oav
код не реален, это да. но догадаться, что он делает - вполне можно. bool там можно и не использовать, т.к. он вполне себе приводится к int.
во втором примере дело не в точках следования. с ними там как раз все нормально: и вызов функции, и возврат из нее - точки следования. а вот порядок вычисления аргументов - не задан. в этом и подвох.

He1mut
про 'я сам выучил С++' это к Clear_Mind. просто твой ответ смотрелся рядом с его очень гармонично.
Clear_Mind: я выучил...
oav: а я все никак не могу....
He1mut: тогда прочтите прекрасную книгу!
расклад-то был именно такой....
(Hvzh @ Oct 20 2006, в 11:57) писал(а):Если в Вашем коде поменять ++x_ на x_++, вывод Вашего примера не изменяется, но если поменять в примере He1mut'а ++i на i++, то вывод будет 210. Как Вы это объясните?
а вот тут как раз про точки следования. ++x_ или x_++ выполняются внутри функции, а значит к моменту возврата из функции побочные эффекты закрепляются. поэтом разницы никакой нет. а в примере He1mut'а постфиксные инкременты выполняются еще до первого вызова функции, а потому это вообще undefined behavior...

ALL
ребята, заканчивайте с оверквотингом!!!
10 человек ответило по три строчки, а страницу скролить устаешь....
слава роботам!
Спасибо сказали:
Аватара пользователя
georgy_sh
Сообщения: 1172
Статус: thermonuclear...
ОС: GNU/Linux

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение georgy_sh »

elide писал(а):
20.10.2006 17:55
про 'я сам выучил С++' это к Clear_Mind. просто твой ответ смотрелся рядом с его очень гармонично.
Clear_Mind: я выучил...
oav: а я все никак не могу....
He1mut: тогда прочтите прекрасную книгу!

[offtop]
Гыыы. Аж самому смешно стало...
[offtop]
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Можно ли научиться программированию самостоятельно,по книгам?

Сообщение t.t »

(Dark_Savant @ Oct 17 2006, в 17:10) писал(а):или опять все упирается во время и все тот же пипл, который постоянно что-то хавает ?
Про "пипл, который постоянно что-то хавает" мне понравилось :)

(rolano @ Oct 18 2006, в 08:53) писал(а):Заметьте - человек спрашивал не про языки разработки (что лучше выбрать), а про "научиться программированию".
Как говорила моя школьная преподавательница программирования, пока начинающий программист на Си изучает сложный цикл for, начинающий программист на бейсике только начинает учиться _обходиться без_ сишного цикла for ;-)

Dark_Savant писал(а):
17.10.2006 18:22
Невозможно вот так вот сесть и научится программировать на асме, не знаю ничего о компьютерах и программировании.
да примерно так и учились.. у нас в фтк стоял десяток 286, да книжки сабжевые валялись. ходили высматривали, кто себе по паскалю брал, кто по си, а кто и по ассемблеру. сидели, читали, попутно компиляли, пробовали. а ведь по сути ничегошеньки на тот момент о компьютерах, как таковых не знали. натыкались на незнакомый термин, рылись в другой литературе.. ничего, научились.
Я, к примеру, программированию изначально учился на МК-61 (в 10 лет); там не то что асм -- там фактически машкод, хотя и довольно упрощённый по сравнению с тем же 8086. И я весьма жалею о том, что позже меня стали учить бейсику и паскалю, чем заставили меня забыть свои "машкодовские" привычки и фактически почти отвадили от программирования; и о том, что книга Абеля не попалась мне года на два-три раньше, чем это случилось.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: