Wskaźnik na wskaźnik, problem z zrozumieniem działania i jego obecności
Ostatnio zmodyfikowano 2016-04-20 14:20
mikius Temat założony przez niniejszego użytkownika |
Wskaźnik na wskaźnik, problem z zrozumieniem działania i jego obecności » 2016-04-20 11:21:05 Witam, posiadam kod z zajęć i wszystko jest dla mnie zrozumiałem, po za jednym momentem. A więc, w pliku źródłowym main.cpp tworzę sobie( jak dobrze rozumiem) tablicę obiektów typu student, która ma przechowywać wszystkich dodanych studentów przez użytkownika oraz wszystkie informacje o nich , wraz z dynamiczna tablicą przedmiotów. Jezeli się myle, to mam nadzieje ze mnie ktoś poprawi :) Problem mój polega na tym, że nie rozumiem dlaczego tablica obiektów posiada podwójny wskaźnik(studenci** tablica). Z góry dzięki i czekam na wasze wytłumaczenie. Poniżej zamieszczam cały kod :) #include<string> #include<iostream> class studenci { std::string name; std::string surename; int nr; float srednia; std::string * przedmioty; int rozmiar; public: studenci(); studenci( std::string n, std::string s, int album, float sr, std::string * p, int size ); ~studenci(); friend std::ostream & operator <<( std::ostream & potok, studenci obiekt ); };
std::ostream & operator <<( std::ostream & potok, studenci obiekt );
#include "studenci.h"
studenci::studenci() { name = "Michal"; surename = "Jakistam"; nr = 1223332; srednia = 5.0; przedmioty = nullptr; rozmiar = 0; }
studenci::studenci( std::string n, std::string s, int album, float sr, std::string * p, int size ) { name = n; surename = s; nr = album; srednia = sr; rozmiar = size; przedmioty = new std::string[ size ]; for( int i = 0; i < size; i++ ) { przedmioty[ i ] = p[ i ]; } }
studenci::~studenci() { delete[] przedmioty; } std::ostream & operator <<( std::ostream & potok, studenci obiekt ) { potok << obiekt.name << std::endl; potok << obiekt.surename << std::endl; potok << obiekt.nr << std::endl; potok << obiekt.srednia << std::endl; for( int i = 0; i < obiekt.rozmiar; i++ ) { potok << obiekt.przedmioty[ i ] << std::endl; } return potok; }
#include<string> #include<iostream>
#include <fstream> #include "studenci.h" using namespace std; int main() { int ilosc; string imie; string nazwisko; int nr_albumu; float sredniaa; int subject; string * przed; studenci ** tablica; ofstream plikout( "studenci.txt", ofstream::out ); cout << "Podaj ilu studentow chcesz wprowadzic" << endl; cin >> ilosc; tablica = new studenci *[ ilosc ]; for( int i = 0; i < ilosc; i++ ) { cout << "Wprowadz imie:"; cin >> imie; cout << "Wprowadz nazwisko:"; cin >> nazwisko; cout << "Wprowadz nr albumu:"; cin >> nr_albumu; cout << "Wprowadz srednia:"; cin >> sredniaa; cout << "Wprowadz ilosc przedmiotw:"; cin >> subject; przed = new string[ subject ]; for( int j = 0; j < subject; j++ ) { cin >> przed[ j ]; } tablica[ i ] = new studenci( imie, nazwisko, nr_albumu, sredniaa, przed, subject ); delete[] przed; } if( plikout.is_open() ) for( int i = 0; i < ilosc; i++ ) { plikout << *( tablica[ i ] ) << endl; } else cout << "Cant open file" << endl; system( "pause" ); }
|
|
carlosmay |
» 2016-04-20 11:44:19 Problem mój polega na tym, że nie rozumiem dlaczego tablica obiektów posiada podwójny wskaźnik(studenci** tablica). |
W kodzie jest używana tablica wskaźników, a '**' to wskaźnik do wskaźnika. student ** tablica; tablica = new student *[ rozmiar ]; tablica[ 0 ] = new student( args );
|
|
mikius Temat założony przez niniejszego użytkownika |
» 2016-04-20 14:20:13 Wielki dzieki, myślę że teraz rozumiem :) |
|
« 1 » |