Wskaźnik na Vektor, dlaczego trzeba użyć "this" chce to zrozumieć, prosiłbym o wytłumaczenie.

0
#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
class person {

	
	typedef struct {
		int id;
		char imie[20];
		char nazwisko[20];
		int wiek;
	} tosoba;
	
	
	vector<tosoba>*osoba=new vector<tosoba>;
	int size;
	
public:
	
	person(int s) {
		size = s;
	};
	
	void add_person() {
		
		for (int i = 0; i < size; i++)
		{
			
			tosoba temp;

			cout << "Podaj ID: ";
			cin >> temp.id;
			cout << "Podaj imie: ";
			cin >> temp.imie;
			cout << "Podaj nazwisko: ";
			cin >> temp.nazwisko;
			cout << "Podaj wiek: ";
			cin >> temp.wiek;
			osoba->push_back(temp);          //w tym miejscu.

		}

	}

	void show_person()
	{
		for (int i = 0; i < size; i++)
		{
			tosoba temp;
			temp = osoba->at(i);                        //w tym miejscu.
			cout << temp.id << endl;
			cout << temp.imie << endl;
			cout << temp.nazwisko << endl;
			cout << temp.wiek << endl;

		}

	}

	~person() {
		
		delete osoba;
	}

};

int main()
{
	int size;
	cout << "Podaj rozmiar tablicy:" << endl;
	cin >> size;

	person a(size);
	a.add_person();
	a.show_person();

	return 0;
}

Rozumiem to tak że dzięki temu metoda odnosi się do obiektu na który wskazujemy a nie wskaźnika ?

1

Nie uzywaj new... po prostu zrob:

vector<tosoba> osoba;

Dzieki temu nie bedziesz musial usuwac a jak klasa umrze obiekt zostanie usuniety...

0
daniel1302 napisał(a):

Nie uzywaj new... po prostu zrob:

vector<tosoba> osoba;

Dzieki temu nie bedziesz musial usuwac a jak klasa umrze obiekt zostanie usuniety...

Wiem wiem ale w zadaniu było żeby zwolnić pamięć więc wolałem zrobić tak żeby nie stracić punktów : )

2

new z std::vector nie ma sensu. std::vector już w sobie zawiera wskaźnik na pamięć, którą sam automatycznie zarządza.

Jakie this? W tym kodzie nic takiego jawnie nie występuje.

1

A gdzie uzywasz this, ze o niego pytasz? this to jest wlasnie wskaznik na obiekt klasy w ktorej to this uzywasz...

Jesli zrobisz:

struct SomeClass
{
    void printThis() { printf("%p", this); }
};

auto a = SomeClass{};
auto b = SomeClass{};

a.printThis();
b.printThis();

To zobaczysz, ze this w a wskazuje na adres instancji a, a this w b na adres instancji b...

Tutaj masz przyklad: https://wandbox.org/permlink/JZYItkZJAlzbzG3l

0
daniel1302 napisał(a):

A gdzie uzywasz this, ze o niego pytasz? this to jest wlasnie wskaznik na obiekt klasy w ktorej to this uzywasz...

Jesli zrobisz:

struct SomeClass
{
    void printThis() { printf("%p", this); }
};

auto a = SomeClass{};
auto b = SomeClass{};

a.printThis();
b.printThis();

To zobaczysz, ze this w a wskazuje na adres instancji a, a this w b na adres instancji b...

Ok... zinterpretowałem "->" jako "this" więc ta strzałka wskazuje na metodę która się odnosi do obiektu tak ? ponieważ metoda ma się odnosić do obiektu nie wskaźnika na obietk dobrze rozumiem >

0
MarekR22 napisał(a):

new z std::vector nie ma sensu. std::vector już w sobie zawiera wskaźnik na pamięć, którą sam automatycznie zarządza.

Jakie this? W tym kodzie nic takiego jawnie nie występuje.

Tak jak napisałem w komentarzu powyżej, wolałem tego użyć ponieważ w treści zadania pisze żeby zwolnić pamięć więc nie chciałem żeby było się do czego doczepić.

0

Klasyczny przykład użycia this

...
class Malpka {
private:
    int* a;
public:
    void someMethod(int* a);
};

void Malpka::someMethod(int* a)
{
    this->a = a;
}
...

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