Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Typ wyliczeniowy wyjaśnienie i rzutowanie typów

Ostatnio zmodyfikowano 2012-01-20 14:46
Autor Wiadomość
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:

C/C++
#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:
C/C++
#include <iostream>
using namespace std;
int main()
{
    enum colors { black, red, white };
    colors c;
    for( c = black; c < white; c = static_cast < colors >( c++ ) ) //tak jak z int?
    {
        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:

C/C++
#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?
P-48890
pekfos
» 2012-01-20 14:18:58
static_cast( c++ )
To się kompiluje? Mający tylko tą linię, powiedz na jaki typ rzutujesz..
P-48892
jsc
» 2012-01-20 14:19:06
Lepiej umieszczaj swoje problemy w wątkach w stosunku 1 do 1.
P-48893
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
P-48895
« 1 »
  Strona 1 z 1