void wypis (void) const ; - co to za deklaracja ?

0

Witam Państwa,

w Symfoni znalazłem taki oto kod:

//***************************************************
// Program z paragrafu   10.18 (str 299)
//***************************************************

#include <iostream>
using namespace std;
////////////////////////////////////////////////////////
class pozycja {
     int  x ,
          y ;
public :
     pozycja (int a, int b ) {x = a ; y = b ; }
    void wypis (void) const ;                         ////////////////// Dlaczego mamy (void) ?                    

     void przesun(int a, int b);
} ;
/////////////////////////////////////////////////////////
void pozycja::wypis() const                         //
{
     cout << x << ", " << y << endl ;
}
/*******************************************************/
void pozycja::przesun(int a , int b)
{
     x = a;    y = b ;                            //
}
/*******************************************************/
int main()
{
     pozycja      samochod(40, 50),                  //
               pies(30, 80) ;

     const pozycja dom(50, 50) ;                   //

     // zastosowanie funkcji skladowej - const

     samochod.wypis() ;
     pies.wypis() ;                               //
     dom.wypis() ;

     // zastosowanie funkcji nie-const

     samochod.przesun(4,10) ;
     pies.przesun(50, 50) ;
     // dom.przesun(0, 0) ;               // blad  !
}

 

I niestety nie wiem dlaczego deklaracja funkcji składowej 'wpis' wygląda tak jak wygląda a nie inaczej.

Z góry dziękuję bardzo za odpowiedź.
Pozdrawiam

2
void wypis (void) const ;

void w nawiasie nic nie robi. Jakiś nawyk z C. Generalnie w C jest tak, że jeżeli piszemy funkcję void aaa() to przyjmuje ona zmienną listę argumentów, natomiast void aaa(void) nie przyjmuje żadnego argumentu.

const za funkcją informuje, że nie modyfikuje ona elementów składowych klasy

0

Problem w tym że jeśli nic nie robi program po usunięciu void w nawiasie powinien się skompilować jednak tak się nie dzieje.

1

Po usunięciu void kompiluje się bez problemu - kompilator MSVC++

0

Dziwne bo ja jeśli usunę void w nawiasie program się wcale nie kompiluje, używam MS Visual Studio 2008. Dobrze w takim razie najprawdopodobniej to jakaś zaszłość. Dziękuję za odpowiedzi.

0

Skoro się nie kompiluje to jaki błąd wywala?

0
1>e:\cc++code\19022011\main.cpp(13) : error C2143: syntax error : missing ';' before 'const'
1>e:\cc++code\19022011\main.cpp(13) : error C2182: 'wypis' : illegal use of type 'void'
1>e:\cc++code\19022011\main.cpp(13) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\cc++code\19022011\main.cpp(13) : error C2208: 'const int' : no members defined using this type
1>e:\cc++code\19022011\main.cpp(19) : error C2063: 'pozycja::wypis' : not a function
1>e:\cc++code\19022011\main.cpp(37) : error C2064: term does not evaluate to a function taking 0 arguments
1>e:\cc++code\19022011\main.cpp(38) : error C2064: term does not evaluate to a function taking 0 arguments
1>e:\cc++code\19022011\main.cpp(39) : error C2064: term does not evaluate to a function taking 0 arguments 
0

Bo nawiasy muszą zostać...

0

Jasna sprawa...Dzięki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.