Typ wyliczeniowy wyjaśnienie i rzutowanie typów
Ostatnio zmodyfikowano 2012-01-20 14:46
MJJay Temat założony przez niniejszego użytkownika |
Typ wyliczeniowy wyjaśnienie i rzutowanie typów » 2012-01-20 14:15:14 Witam, chciałbym Was prosić o rozjaśnienie mi pewnego problemu. Czytałem już o tym typie w tym serwisie i w innym oraz w książce ale dalej nie czaje pewnego faktu? Jak to jest z konwersjami? Jawną i niejawną. Chodzi mi o to, że jak mamy taki program: #include <iostream> using namespace std; int main() { enum colors { black, red, white }; colors c; for( c = black; c <= white; c = static_cast < colors >( c++ ) ) { cout << c << endl; } }
To jak to się tutaj wykonuje? Program tzn język automatycznie tj niejawnie rzutuje to wyrażenie na int (jak każde enum?) a żeby później wykonać na tym jakieś operacje to musimy to jawnie rzutować tak? W języku C odbywa się to wszystko niejawnie ale w C++ mozna tylko enum->int niejawnie a int->enum to musimy jawnie tak? Rozumiecie mnie? Dlaczego nie mogę zrobić tak: #include <iostream> using namespace std; int main() { enum colors { black, red, white }; colors c; for( c = black; c < white; c = static_cast < colors >( c++ ) ) { cout << c << endl; } }
czyli zamiast c+1 to c++ i zamiast <= to < przecież tak mamy...w C++ jak robimy int i = 0; i<10 to wykona sie 10 razy a jak dodamy <= to wykona się wiecej razy...mam racje? Więc prosiłbym o wyjaśnienie mi tego wszystkiego... Poza tym.. mam napisać program, który określa rozmiar typu a nastepnie za pomoca petli for wypisze adresy (rzutowane na long) wszystkich elementow zawartych we wcześniej zdefiniowanych tablicach. Rozwiązałem to tak: #include <iostream> using namespace std;
int main() { int a[ 10 ]; char b[ 5 ]; long int li[ 10 ]; float f[ 10 ]; double d[ 5 ]; cout << "sizeof(int) = " << sizeof( int ) << endl; for( int i = 0; i < 10; i++ ) cout << "&a[" << i << "] = " <<( long ) & a[ i ] << endl; cout << "sizeof(char) = " << sizeof( char ) << endl; for( int i = 0; i < 10; i++ ) cout << "&b[" << i << "] = " <<( long ) & b[ i ] << endl; cout << "sizeof(long int) = " << sizeof( long int ) << endl; for( int i = 0; i < 10; i++ ) cout << "&li[" << i << "] = " <<( long ) & li[ i ] << endl; cout << "sizeof(float) = " << sizeof( float ) << endl; for( int i = 0; i < 10; i++ ) cout << "&f[" << i << "] = " <<( long ) & f[ i ] << endl; cout << "sizeof(double) = " << sizeof( double ) << endl; for( int i = 0; i < 10; i++ ) cout << "&d[" << i << "] = " <<( long ) & d[ i ] << endl; } Czy to rozwiązanie jest prawidłowe? |
|
pekfos |
» 2012-01-20 14:18:58 static_cast( c++ ) To się kompiluje? Mający tylko tą linię, powiedz na jaki typ rzutujesz.. |
|
jsc |
» 2012-01-20 14:19:06 Lepiej umieszczaj swoje problemy w wątkach w stosunku 1 do 1. |
|
MJJay Temat założony przez niniejszego użytkownika |
» 2012-01-20 14:46:08 No właśnie to się NIE kompiluje i chcę wiedzieć dlaczego... czy może mi ktoś wyjaśnić jak te programy, które napisalem działają? (ten pierwszy...)
#edit juz poprawilem |
|
« 1 » |