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

Wskaźnik na wskaźnik, problem z zrozumieniem działania i jego obecności

Ostatnio zmodyfikowano 2016-04-20 14:20
Autor Wiadomość
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 :)
C/C++
//"studenci.h"
#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 );
//studenci.cpp
#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;
}

//main.cpp
#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" );
}
P-147459
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.

C/C++
student ** tablica; // deklaracja wskaźnika do wskaźnika
tablica = new student *[ rozmiar ]; // teraz wsk tablica wskazuje na zaalokowaną tablicę wskaźników typu student
tablica[ 0 ] = new student( args ); // ustawienie pierwszego wskaźnika z tablicy na pamięć zaalokowaną na obiekt utworzony konstruktorem student
P-147460
mikius
Temat założony przez niniejszego użytkownika
» 2016-04-20 14:20:13
Wielki dzieki, myślę że teraz rozumiem :)
P-147463
« 1 »
  Strona 1 z 1