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

Konstruktor

Ostatnio zmodyfikowano 2015-06-25 22:10
Autor Wiadomość
Sumeek
Temat założony przez niniejszego użytkownika
Konstruktor
» 2015-06-25 20:50:58
Witam, czy w tym programie konstruktorem jest OPERACJA? Jeśli nie to jak zdefiniowany jest konstruktor? Za tydzień mam kolokwium z programowania i doszedłem do wniosku że zacznę się już uczyć. Ten program jest przykładem programu jaki może się pojawić właśnie na kolosie, lecz trzeba w nim będzie wykorzystać konstruktor. Z tego co się uczyłem konstruktor definiuje się w klasie, a wywołuje się go NazwaKonstruktora::NazwaKonstruktora, lecz w tym programie nic takiego nie widzę. I nie wiem czy podczas nauki, mogę się właśnie na nim wzorować. Jeśli nie ma konstruktora, to możecie mi pomóc, przerobić ten program w taki sposób, aby konstruktor się pojawił?
C/C++
#include <conio.h>
#include <iostream>
#define N 200
using namespace std;

class ELEMENT
{
public:
    int liczba;
    int indeks;
    ELEMENT * nast;
};

class TABLICA
{
protected:
    int tab[ N ];
    void zaptab();
    void poktab();
};

class STOS
{
protected:
    ELEMENT * pocz;
    void na_pocz( int, int );
    void z_pocz( int &, int & );
    void czyt_liste();
    void usun_liste();
};

class OPERACJA
    : public TABLICA
     , STOS
{
    int pierwsza( int );
    void liczby_na_stos();
public:
    void operuj();
};

//Metody klasy TABLICA 
void TABLICA::zaptab()
{
    srand( time( NULL ) );
    for( int j = 0; j < N; j++ )
    {
        tab[ j ] = rand() % 100;
    }
}

void TABLICA::poktab()
{
    cout << endl;
    for( int j = 0; j < N; j++ )
    {
        cout.width( 4 );
        cout << tab[ j ];
    }
    cout << endl;
}

//Metody klasy STOS             
void STOS::na_pocz( int d1, int d2 )
{
    ELEMENT * p = pocz;
    pocz = new ELEMENT;
    pocz->liczba = d1;
    pocz->indeks = d2;
    pocz->nast = p;
}

void STOS::z_pocz( int & d1, int & d2 )
{
    ELEMENT * p;
    if( pocz != NULL )
    {
        d1 = pocz->liczba;
        d2 = pocz->indeks;
        p = pocz->nast;
        delete pocz;
        pocz = p;
    }
}

void STOS::czyt_liste()
{
    ELEMENT * p = pocz;
    cout << "\n  Liczby pierwsze w tablicy (liczba/indeks):\n\n";
    int j = 0;
    while( p != NULL )
    {
        cout.width( 5 );
        cout << p->liczba << '/';
        cout.width( 3 );
        cout << p->indeks;
        if( ++j % 8 == 0 ) cout << "\n\n";
       
        p = p->nast;
    }
    cout << '\n';
}

void STOS::usun_liste()
{
    int d1, d2;
    while( pocz != NULL ) z_pocz( d1, d2 );
   
}

//Metody klasy OPERACJA   
int OPERACJA::pierwsza( int x )
{
    if( x == 0 ) return 0;
   
    for( int j = 2; j <= x / 2; j++ )
    {
        if( x % j == 0 ) return 0;
       
    }
    return 1;
}

void OPERACJA::liczby_na_stos()
{
    pocz = NULL;
    for( int j = N - 1; j >= 0; j-- )
         if( pierwsza( tab[ j ] ) ) na_pocz( tab[ j ], j );
   
}

void OPERACJA::operuj()
{
    char d;
    do
    {
        system( "CLS" );
        zaptab();
        liczby_na_stos();
        czyt_liste();
        usun_liste();
        cout << "\n  Jeszcze raz (t/n)?";
        d = getch();
    }
    while( d != 'n' );
   
}

int main()
{
    OPERACJA obiekt;
    obiekt.operuj();
    return 0;
}
P-134083
Lora
» 2015-06-25 20:54:55
P-134084
Sumeek
Temat założony przez niniejszego użytkownika
» 2015-06-25 20:57:42
Rozumiem, przestudiowałem lekcję o konstruktorach, lecz podobno w podanym wyżej programie jest kostruktor, lecz ja go nie widzę.
P-134085
Lora
» 2015-06-25 21:09:20
Konstruktor zawsze jest, jeśli żadnego nie zdefiniujesz to wygeneruje się kostruktor domyślny. Z tego co widzę to w tych klasach nie ma zdefiniowanych konstruktorów.
BTW: kod na forum daje się w znacznikach [.cpp][./cpp] (bez kropek)
P-134088
akwes
» 2015-06-25 22:10:28

Konstruktor zawsze jest, jeśli żadnego nie zdefiniujesz to wygeneruje się kostruktor domyślny.
To zdanie nie jest prawdziwe. Konstruktor będzie wygenerowany jedynie pod pewnymi warunkami.
C/C++
#include <iostream>
using namespace std;

class What
{
private:
    int & ohNo;
};

int main() {
    What what;
    return 0;
}

prog.cpp:4:7: note: 'What::What()' is implicitly deleted because the default definition would be ill-formed
http://ideone.com/uECJtG
P-134094
« 1 »
  Strona 1 z 1