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

Klasy - inicjowanie pamieci

Ostatnio zmodyfikowano 2013-11-27 17:41
Autor Wiadomość
dybek
Temat założony przez niniejszego użytkownika
Klasy - inicjowanie pamieci
» 2013-11-19 22:09:04
Witam, zdefiniowalem sobie klase i utowrzylem funkcje w niej. Funkcja wypisz(wypisuje dane) oraz funkcja wpisz(wpisuje dane). Chce wykorzystac pare razy funkcje wpisz  ( gdzie wpisuje np imie i nazwisko) i po wywolaniu funkcji wypisz aby wypisalo mi wszystkie dane a nie tylko ta ostatnia wpisana. Nie wiem jak zarezerwowac pamiec dla nowo utworzonych danych tak aby byly pamietane.
P-96741
pekfos
» 2013-11-19 22:18:26
std::vector<>?
P-96745
dybek
Temat założony przez niniejszego użytkownika
» 2013-11-19 22:36:42
Nie rozumiem, moglbys troche rozwinac ?
P-96750
dybek
Temat założony przez niniejszego użytkownika
» 2013-11-20 12:07:48
Zastosowalem sie do tego co powiedziales, ale teraz wypisuje mi ostatnia pozycje tyle razy ile razy wpisywalem dane. Nie wiem gdzie robie blad
C/C++
//student.cpp
#include "student.h"
#include <iostream>
#include <vector>
#include < string >
#include <vector>
using namespace std;

vector < student > tablica;

student::student( void )
    : oceny( new int )
    , imie( new char )
    , nazwisko( new char )
{
}

student::student( int * xoceny, char * ximie, char * xnazwisko )
    : oceny( xoceny )
    , imie( ximie )
    , nazwisko( xnazwisko )
    , counter( 0 )
{
}
student::~student( void )
{
}
void student::wypisz( void )
{
   
    for( int i = 0; i < tablica.size(); i++ )
    {
        cout << tablica[ i ].imie << " " << tablica[ i ].nazwisko << " " << endl;
        for( int j = 0; j < 3; j++ )
             cout << " " << "ocena - " << tablica[ i ].oceny[ j ] << endl;
       
    }
}
void student::wpisz( void )
{
   
    cout << "podaj imie\t";
    cin >> imie;
    cout << endl;
    cout << "podaj nazwisko\t";
    cin >> nazwisko;
    cout << endl;
   
    for( int i = 0; i < 3; i++ )
    {
        cout << "ocena" << i + 1 << " - ";
        cin >> oceny[ i ];
       
    }
    tablica.push_back( student( oceny, imie, nazwisko ) );
}


double student::srednia( void )
{
    double suma = 0;
    for( int i = 0; i < 3; i++ )
    {
        suma = suma + oceny[ i ];
    }
    double srednia = suma / 3;
    return srednia;
}
C/C++
//// "student.h"
#pragma once
#include <string>
#include <vector>
class student
{
public:
    student( void );
    student( int * xoceny, char * ximie, char * xnazwisko );
    ~student( void );
    int * oceny;
    char * imie;
    char * nazwisko;
    void wypisz( void );
    void wpisz( void );
    double srednia( void );
    int counter;
   
};
C/C++
/// i program glowny
#include "student.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    student nowy;
    int i;
    int znak = 0;
    while( znak != 9 )
    {
        system( "cls" );
        cout << "masz wybor !" << endl;
        cout << "wpisz - 1\n";
        cout << "wypisz - 2\n";
        cout << "srednia - 3\n";
        cin >> znak;
        cout << endl;
       
        switch( znak )
        {
        case 1:
            nowy.wpisz();
            break;
        case 2:
            nowy.wypisz();
            system( "pause" );
            break;
        case 3:
            double sr;
            sr = nowy.srednia();
            cout << "srednia = \t " << sr << endl;
            system( "pause" );
            break;
            default: cout << "zle";
            break;
        }
    }
   
    return 0;
   
}
P-96773
pekfos
» 2013-11-20 13:37:02
Nie masz odpowiedniego konstruktora kopiującego i wychodzisz poza obszar tablicy.
P-96787
dybek
Temat założony przez niniejszego użytkownika
» 2013-11-20 19:40:57
Mam utworzyc nastepnego konstruktora ktory bedzie kopiowal ? jak mam kopiowac z jednego konstruktora do drugiego ?
P-96833
pekfos
» 2013-11-20 19:45:50
Skoro nie masz i jest to błędem, to musisz go utworzyć. To chyba logiczne..
P-96836
dybek
Temat założony przez niniejszego użytkownika
» 2013-11-27 17:41:55
Dalej mam problem z konstruktorem kopiujacym. To jest podobny program co jest umieszczony na stronce tylko tyly zamiast string sa odpowiednio char i int. Nie wiem jak uzyc go aby wypisywalo wszystkie dane a nie tylko ta ostatnia wiele razy.

C/C++
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class student
{
public:
    char * imie;
    char * nazwisko;
    int * numer;
public:
    static int ilosc_studentow;
    student()
    {
        ilosc_studentow++;
    }
    student( student & k )
    {
        imie = k.imie;
        nazwisko = k.nazwisko;
        numer = k.numer;
    }
    student( char * name, char * surname, int * number );
    void wypisz( void )
    {
       
        cout << imie << " " << nazwisko << endl;
        for( int i = 0; i < 3; i++ )
        {
            cout << numer[ i ] << endl;
        }
       
    }
};
student::student( char * name, char * surname, int * number )
    : imie( name )
    , nazwisko( surname )
    , numer( number )
{
   
}

int student::ilosc_studentow;

int main()
{
    char imie[ 50 ], nazwisko[ 50 ];
    int numer[ 3 ];
    vector < student > nowy;
    int znak = 0;
    while( znak != 3 )
    {
        system( "cls" );
        cout << "dopisz 1 \nwypisz 2 \n";
        cin >> znak;
        switch( znak )
        {
        case 1:
            cout << "imie ";
            cin >> imie;
            cout << "nazwisko ";
            cin >> nazwisko;
            for( int i = 0; i < 3; i++ )
            {
                cout << "numer  ";
                cin >> numer[ i ];
            }
            nowy.push_back( student( imie, nazwisko, numer ) );
            break;
        case 2:
            cout << " ilosc studentow : " << student::ilosc_studentow << endl;
            for( int i = 0; i < nowy.size(); i++ )
            {
                cout << nowy[ i ].imie << " ";
                cout << nowy[ i ].nazwisko << "\n";
                for( int j = 0; j < 3; j++ )
                {
                    cout << nowy[ i ].numer[ j ] << endl;
                }
                cout << "\n";
            }
            system( "pause" );
            break;
            default: cout << "koniec";
            break;
        }
    }
    return 0;
}
P-97681
« 1 »
  Strona 1 z 1