parametr domniemany w funkcji składowej klasy

0

Mam całkiem prosty prosty programik w ramach ćwiczeń.
Klasa tablica - tworząc obiekt podaję ilość elementów tablicy, jeśli nie podam ilości to domyślnie tworzy się 10 elementów. Problem jest z funkcją wypisującą elementy. Jej parametrem jest ilość elementów do wypisania, natomiast chciałbym, żeby przy wywołaniu bez argumentów wypisała wszystkie - każdy obiekt ma informację jaka jest długość tablicy (w zmiennej _length) i ją chciałem wykorzystać jako argument domniemany, ale niestety kompilator protestuje. Czy w ten sposób można wykorzystać tylko zmienne statyczne ?

 #include <iostream>
using namespace std;

class tablica {
 public:
  
    
  tablica(int length=defaultLength){
    _length=length;
    _array = new int [_length];    
    for(int i=0;i<length;i++){
      _array[i]=i;
    }
  }
  
  ~tablica(){
    delete [] _array;
  }
  
  
  void print (int howmany= _length){  //tutaj
    for (int i=0;i<howmany;i++){
      cout<<" "<<_array[i];
    }
    cout<<endl;
  }
  
private:   
  int * _array;
  int _length;
  static const int defaultLength =10;
};


int main (){
    tablica moja (7);
    moja.print();

    return 0;
}
0

Niestety,tak jak pisze kompilator tak trzeba zrobić-czyli musiałby być składnikiem statycznym.Ale rozwiązanie Twojego problemu Bracie jest proste,użyć przeładowania nazw funkcji:

void print(int howmany)
{  //formatuj to jakoś po ludzku,a nie syfy javowe jakieś
    for (int i=0;i<howmany;i++)
    {
      cout<<" "<<_array[i];
    }
    cout<<endl;
}
oraz
void print(void)
{
    for (int i=0;i<_length;i++)
    {
      cout<<" "<<_array[i];
    }
    cout<<endl;
}

EDIT:
tą 2 funkcję lepiej napisać tak:

inline void print(void)
{
   print(_length);
}

tak patrzyłem,i coś mi nie pasowało w 1 wersji posta ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1