• 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
961 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 (212,630 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 (212,630 p.)

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

Podobne pytania

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

92,417 zapytań

141,222 odpowiedzi

318,983 komentarzy

61,831 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...