• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gettery i settery w C obiektowym

VPS Starter Arubacloud
+1 głos
1,150 wizyt
pytanie zadane 25 kwietnia 2015 w C i C++ przez Rayden Użytkownik (610 p.)

Witam,

Chciałbym stworzyć dziedziczenie z klasy Plane do klasy Runway, dlatego potrzebuje napisać gettery i settery dla zmiennych, lecz nie mogę, gdyż są one zadeklarowane w sposób zmienna[20] - typ tablicowy:

Plik Plane.h

#pragma once
#include<iostream>
using namespace std;

class Plane
{
private:
	string model[20];
	int width[20], heigth[20];
public:
	void add_plane(); // adds plane
	void load_plane(); // loads content from file
/*
	void set_width(int);
	void set_heigth(int);
	void set_model(string);

	int get_width();
	int get_heigth();
	string get_model();
	*/
};

Plik Plane.cpp
#include<iostream>
#include"plane.h"
#include<fstream> // for reading from the file
#include<cstdlib> // for exit function
using namespace std;
/*
void Plane::set_width(int a)
{
    width=a;
}

void Plane::set_heigth(int b)
{
    heigth=b;
}

void Plane::set_model(string c)
{
    model=c;
}

int Plane::get_width()
{
    return width;
}

int Plane::get_heigth()
{
    return heigth;
}

string Plane::get_model()
{
    return model;
}


*/

 

Czy ktoś wie jak to zrobić ? czytałem, że są podobno jakieś wektory, ale wolałbym na getterach i setterach.

Oczywiście napisałem tylko część funkcji, program jest o wiele bardziej rozbudowany.

 

2 odpowiedzi

+2 głosów
odpowiedź 25 kwietnia 2015 przez hjester Użytkownik (840 p.)

Zacznijmy od łatwiejszego czyli getterów. Zwracać będziesz wskaźnik na pierwszy element tablicy czyli funkcja powinna wyglądać tak(analogicznie dla set_heigth):

int* get_width()
{
	return width;
}

Natomiast setter przyjmuje jako argument wskaźnik na pierwszy element tablicy, którą chcesz przypisać, każdemu elementowi width musisz przypisać wartość z other.

void set_width(int other[])
{
    for (int i = 0; i < 20; ++i)
    {
        width[i] = other[i];
    }
}

To chyba najłatwiejsze rozwiązanie dla początkujacych, zdecydowanie nie jest najlepsze, ale spokojnie na bardziej wyszukane metody przyjdzie pora, póki co warto zastanowić się nad użyciem

std::array

Zamiast zwykłej tablicy.

Poza tym model to raczej będzie poprostu:

std::string model;

To co zadelkarowałeś to tablica stringów, a string zasadniczo jest tablicą znaków:

char model[20];

Poczytaj trochę przekazywaniu argumentów jako wartość, wskaźniki i referencje (jakie są różnice, co to daje i jakie są niebezpieczeństwa). Na początek to wystarczy.

0 głosów
odpowiedź 25 kwietnia 2015 przez Ehlert Ekspert (214,220 p.)

nie widzę problemu. Przesyłasz do metody wskaźnik na tablicę. W jej ciele robisz fora który przypisuje wartości ze wskaźnika na elementy tablicy z obiektu. 

PS. Jeśli tworzysz gety pisz tak:
 

const int Klasa::GetPole() const;

 

komentarz 25 kwietnia 2015 przez Rayden Użytkownik (610 p.)
Możliwe, że mogłem czegoś niedopowiedzieć, dlatego wytłumaczę. Tworzę sobie funkcje np. dodaj lot, wczytaj lot. Tworze zmienne np. model[20], żeby max ilość tych zmiennych była 20, jeśli się nie mylę. Potem to wszystko przypisuje pod plik tekstowy np.

Model[0]=KT500;

Model[1]=SX460;

Zrobiłem to co mówiłeś o tym const., lecz dalej nie wiem jak przesłać do tablicy wskaźnik na tablicę, mógłbyś bardziej mi to wytłumaczyć ??
komentarz 25 kwietnia 2015 przez hjester Użytkownik (840 p.)

Nie do końca zgodzę się z tym zapisem

const int Klasa::GetPole() const;

Teraz kiedy już C++11 jest obowiązującym standardem, zalecane jest zwracanie wartości jako non-const, natomiast wartość funkcja jak najbardziej powinna być const tj:

int Klasa::GetPole() const;

 

komentarz 26 kwietnia 2015 przez Ehlert Ekspert (214,220 p.)

Dodaj "++" w tytule bo C obiektowy gryzie w oczy :D

Podobne pytania

+3 głosów
1 odpowiedź 22,050 wizyt
pytanie zadane 5 lipca 2015 w C i C++ przez Porky Obywatel (1,190 p.)
+3 głosów
3 odpowiedzi 270 wizyt
pytanie zadane 12 kwietnia 2015 w C i C++ przez Rayden Użytkownik (610 p.)
0 głosów
2 odpowiedzi 984 wizyt
pytanie zadane 2 sierpnia 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)

93,025 zapytań

141,990 odpowiedzi

321,293 komentarzy

62,374 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...