parametr domniemany w funkcji składowej klasy

Odpowiedz Nowy wątek
2011-07-29 21:23
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;
}

Pozostało 580 znaków

2011-07-29 21:38
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 ;]


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 4x, ostatnio: MasterBLB, 2011-07-29 22:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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