metody c++

0

Witam,

Znalazłem w internecie takie oto zadanko zeby potrenowac jakies trudniejsze rzeczy na klasach ale potrzebuje Waszej pomocy bo nie rozumiem za bardzo treści zadania

Mamy klasę bazową M zawierającą jako atrybut: jednowymiarową tablicę znaków o długości 15; oraz metody: konstruktor przekazujący wartości atrybutów poprzez parametry, wyświetl. Klasa M ma dodatkowo zawierać dwuargumentowy operator przeciążony „%”, który będzie operował na dwóch obiektach klasy M i zwracał liczbę – długość tego z łańcuchów zawartych w obiektach – który jest dłuższy.

oto początek mojego kodu mam klase bazowa M atrybuty oaz metode wyswietl, ale nie wiem jak mam się zabrać za konstruktor przekazujący wartości atrybutów poprzez parametry. Jeżeli ktoś będzie miał chwilkę to proszę o pomoc.

 
#include <iostream>


using namespace std;
void stop(void)
{
     char j;
     cin>>j;
}

class M
{
    public:
    char tab[15]
    
    
    void wyswietl(void)
    {
       cout<<"Zawartość Tablicy: "<<endl;
       for(int i; i<15; i++)
       {
               cout<<tab[i];
       }   
    }     
};


main()

{
 
     
     stop();
     return 0;

      
}
              
0

Trudniejsze rzeczy na klasach? Skoro nie potrafisz napisać konstruktora, to znaczy ze nawet tych łatwych rzeczy nie umiesz...

class A{
  private:
    int x;
  public:
    A(int y):x(y){}
    //lub
    A(int y){
      x=y;
    }
};
0

Skora mowa o łańcuchach to metoda wyświetl powinna wyglądać mniej więcej tak:
void wyswietl()
{
cout<<tab<<endl;
}

0

to czy moglo by to wygladac w ten sposob jezeli chcialbym aby konstruktor przekazywal wartosci atrybutow poprzez parametry do tablicy? (od razu poprawilem metode wyswietl)

 

class M
{
    private:
         char a; 
    public:
         char tab[15];
    
         M(char tab[15]) : a(tab[15]){}
         void wyswietl()
         {
            cout<<"Zawartość Tablicy: "<<tab<<endl;
         
         }     
};
0
_13th_Dragon napisał(a)

Może poczytaj najpierw pierwszy lepszy kurs, C/C++.
Z twoich pytań wynika że nawet nie masz pojęcia czym jest łańcuch znaków.

jednowymiarowa tablica znakow o dlugosci 15 to to samo co lancuch znakow? w lancuchu znakow rowniez moge okreslic jego rozmiar?

0

Tablica to nie łańcuch, ale łańcuch można wpisać do tablicy.
Długość łańcucha można określić za pomocą funkcji strlen.

0

ok poczytałem tak jak kazaliście i skleiłem coś takiego działa ale czy możecie profesjonalnym okiem ocenić czy wstępnie zastosowałem się do pierwszej części zadania

 
#include <iostream>

using namespace std;
void stop(void)
{
     char j;
     cin>>j;
}

class M
{
    private:
         char a; 
    public:
         char tab[15];
    M (char a,char b,char c,char d,char e,char f,char g,char h,char i,char j,char k,char l,char m,char n,char o )
    {
         tab[0]=a;
         tab[1]=b;
         tab[2]=c;
         tab[3]=d;
         tab[4]=e;
         tab[5]=f;
         tab[6]=g;
         tab[7]=h;
         tab[8]=i;
         tab[9]=j;
         tab[10]=k;
         tab[11]=l;
         tab[12]=m;
         tab[13]=n;
         tab[14]=o;
    }
    void wyswietl()
    {
        cout<<"Wyswietlam elementy tablicy: "<<endl;
        for(int z=0;z<15;z++)
        {
           tab[z];
           cout<<tab[z]<<endl;  
        }
    }   
             
};


main()

{
M wykonaj('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o');
wykonaj.wyswietl();
     
     stop();
     return 0;

      
}
              


0

Nie, no pojechałeś z tym konstruktorem...

char tab[15] = {'a', 'b', 'c', 0};
char cpy[15];
strcpy(cpy, tab);
cout << cpy;
0

Taki trik!!!:
Zamiast w konstruktorze pisząc tab[2] = s; ..... można to zrobić w forze

 M (char a,char b,char c,char d,char e,char f,char g,char h,char i,char j,char k,char l,char m,char n,char o )
    {
         char* Wskaznik = &a;
         for(int Licz = 0; Licz != 15; Licz++, Wskaznik++)tab[Licz] = *Wskaznik;
    }
0

Zaraz chyba umre... :-)

Może tak Ci coś przemówie do Twojego zmysłu programowania:

char* tab = "C++";
char cpy[15];
strcpy(cpy, tab);
cout << cpy;

Opolski Portal Programistyczny
http://programowanie.opole.pl

0

M (char a,char b,char c,char d,char e,char f,char g,char h,char i,char j,char k,char l,char m,char n,char o )

bez kitu... :-)

char* Wskaznik = &a;

bez kitu x 2...

for(int Licz = 0; Licz != 15; Licz++, Wskaznik++)tab[Licz] = *Wskaznik;

bez kitu x 10... Ja nawet nie wiedziałem, żę tak sie da... :D


Opolski Portal Programistyczny
http://programowanie.opole.pl

0

No cóż ^^ Parametry są obok siebie w pamięci, więc... ^^
PS ;( nie działa chyba

0

może tak bez jakichkolwiek żali napisałem w dziale Newbie wiec chyba oznacza to, że jestem początkujący dlatego trochę wyrozumiałości.

0

Czemu nie zrobisz tego jak człowiek?

class M{
public:
  char tab[15];

  M(char* ptr){
    strcpy(tab, ptr);
  }

  void wyswietl(){
    cout << tab;
  }
}

int main(){
  M m("C++");
  m.wyswietl();
}

Opolski Portal Programistyczny
http://programowanie.opole.pl

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