• 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

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
+1 głos
787 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 (210,390 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 (210,390 p.)

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

Podobne pytania

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

89,768 zapytań

138,373 odpowiedzi

309,455 komentarzy

59,678 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 1074p. - Argeento
  2. 1010p. - rucin93
  3. 1006p. - Michal Drewniak
  4. 1000p. - Łukasz Eckert
  5. 974p. - TheLukaszNs
  6. 949p. - JMazurkiewicz
  7. 946p. - adrian17
  8. 933p. - Jarosław Roszyk
  9. 889p. - nidomika
  10. 860p. - Mikbac
  11. 847p. - ssynowiec
  12. 799p. - Hubert Chęciński
  13. 772p. - Mawrok
  14. 768p. - overcq
  15. 764p. - Vinox
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...