Klasa, a funkcja zapisująca dane do pliku.

0

Witam tą funkcję/metodę mam zamieścić w środku klasy i zaś jak ją wywoływać, bo nie zbyt rozumiem.

Normalnie tak zapisywałem dane do pliku:

	sOsoba ktos[3];


	FILE *plik = fopen("Osoby.txt", "r");

	if (plik == NULL)
		printf("nie udalo sie stworzyc pliku\r\n");
	else
		fread(ktos, sizeof(sOsoba), 3, plik);

	for (int i = 0; i < 3; i++)
	{
		cout <<ktos[i].imie<<" "<<ktos[i].data_urodzenia<<" wazy: "<< (int)ktos[i].waga<<" kg i ma "<<(int)ktos[i].wzrost<<" cm wzrostu\n";
	}

	fclose(plik);

A teraz w tej funkcji w klasie jak ma to wyglądać?

Tzn. co ma być argumentem tej funkcji, bo pewnie wskaźnik na obiekt tej klasy, a z tym mam problem, więc jak to ma wyglądać:P?

Klasa wygląda tak:


class cOsoba
{
 
private:
    long long pesel = 95041812440;
 
public:  //Atrybuty
    string imie;
    string nazwisko;
    int wiek;
 
 
 
 
    //Metody
    void wypisz();
 
    //cOsoba();
    ~cOsoba();
    cOsoba(string imie, string nazwisko, int wiek);
 
 
 
 
};
0
  1. Wraz z C++ przychodzą odpowiednie strumienie.
  2. Nie potrafisz zrobić metody? Funkcji? Takowa będzie pewnie chciała ŚCIEŻKĘ DO PLIKU lub >3.
  3. Używając odpowiednich strumieni nie martwisz się o żadne argumenty, przeciążasz operatory << i >> dla (o/i)stream
0
spartanPAGE napisał(a):
  1. Wraz z C++ przychodzą odpowiednie strumienie.
  2. Nie potrafisz zrobić metody? Funkcji? Takowa będzie pewnie chciała ŚCIEŻKĘ DO PLIKU.

ale po co jej ścieżka do pliku skoro ja już ją ustalam?

Co ma być argumentem funkcji? Jak dla mnie obiekt klasy, który ma być zapisany w pliku, tylko nie bardzo wiem, jak ma wyglądać deklaracja tej funkcji z odpowiednimi argumentami.

PS: Chodzi Ci o taki sposób?

sOsoba ludzie[3];

	fstream plik("PI_osoba.txt", ios::out);
	if (plik.good())
	{
		for (int i = 0; i < 3; i++)
		{
			plik << ludzie[i].imie << " "<<ludzie[i].nazwisko<<" "<<ludzie[i].wiek<<" "<<ludzie[i].waga<<" "<<ludzie[i].wzrost<<"\n";
			plik.flush();
		}
		plik.close();
	}
2

Ten kod w ogóle działał? Ciekawie wyglądać musi sizeof(sOsoba) w kontekście użycia wewnątrz typu string.

0
kaczus napisał(a):

Ten kod w ogóle działał? Ciekawie wyglądać musi sizeof(sOsoba) w kontekście użycia wewnątrz typu string.

Stworzyłem taki kod, ale jest durny:D

void cOsoba::zapisz(cOsoba ludzie)
{
	fstream plik("PI_osoba.txt", ios::out);
	if (plik.good())
	{
		
			plik << ludzie.imie << " " << ludzie.nazwisko << " " << ludzie.wiek << "\n";
			plik.flush();
		
		plik.close();
	}


}

Bo żeby go wywołać trzeba zapisać:

student.zapisz(student)

A przecież chyba nie o to się rozchodzi. Ta funkcja ma w ogóle mieć jakiś argument, czy po prostu być wywoływana na końcu i zapisywać wszystkie te obiekty, które istnieją? Jeśli tak to jak pobierać ich nazwy, żeby nie wywoływać funkcji w ten sposób?

2

Słyszałeś o czymś takim jak this? o TYM OBIEKCIE?
Wróć jak zapoznasz się z podstawami podstaw, na miłość boską.

1

tu robisz coś innego niz pokazane jest w pierwszym poście, w tym zrobiłbym raczej albo przeciążenie ostream, albo metodę przyjmująca jako parametr

std::ostream &plik 

i wtedy zapis byłby:

plik << imie << " " << nazwisko << " " << wiek << "\n";
0
spartanPAGE napisał(a):

Słyszałeś o czymś takim jak this? o TYM OBIEKCIE?
Wróć jak zapoznasz się z podstawami podstaw, na miłość boską.

Nie wróć, tylko zadanie muszę zrobić na dziś. I jeśli ja nie mam ochoty pomóc, to mu nie pomagam, a jeśli mam to streszczam co potrzeba, a nie utrudniam mu to i przede wszystkim piszę konkretnie. A nie tak jak ty, rozmawiając z tobą, czuję się jakbym rozwiązywał zagadki.

A gdybyś pisał konkretnie tj. czy funkcja ma mieć argumenty czy nie, jak ma wyglądać jej deklaracja to już dawno bym miał to napisane i co najważniejsze umiałbym to. Wydaje mi się, że wiem co to "this", ale i tak nie potrafię go odpowiednio użyć, w ten funkcji.

0

@spartanPAGE

Tak z łaski swojej nie można było napisać, że usunąć argument oraz tego, że "this" trzeba użyć w ten sposób?

void cOsoba::zapisz()
{
	fstream plik("PI_osoba.txt", ios::out);
	if (plik.good())
	{
		
			plik << this->imie << " " << this->nazwisko << " " << this->wiek << "\n";
			plik.flush();
		
		plik.close();
	}


}
0

Dzięki Panowie, ubawiłem się :D

0

Dobry wątek na kawową przerwę, dzienks.

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