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

Klasy nurtujące pytanie [C++]

Object Storage Arubacloud
0 głosów
624 wizyt
pytanie zadane 31 lipca 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)
Witam,

 mam pare pytań.

1. Mam klasę i chcę zmienić jej wartość, czy robi się to przez referencje czy może poprostu jakis obiekt i tyle

2. Odczytuje klase: Oko numerJeden;

numerJeden.ilosc;

I teraz czy mogę przypisać tą klasę Oko numerJeden na caly czas trwania programu? Bo uzytkownik moze ja zmienic i wtedy klasa Oko numerJeden nie ma już tej wartości początkowej tylko inna, i czy mogę uzyc pozniej znowu Oko numerJeden i zmiennionej zmiennej?

2 odpowiedzi

+1 głos
odpowiedź 31 lipca 2016 przez Szykem2 Nałogowiec (29,510 p.)

1. Jeżeli pole klasy, którego wartość chcesz zmienić jest publiczne (nie powinno się tworzyć pól publicznych) to zmieniasz tą wartość przez

obiekt.pole = wartość

Jeżeli jest prywatne, to tworzysz tzw. setter i getter: metody pozwalające odczytywać pola i zmieniać. Możesz też przeładować operator =.

2. Poczytaj o constach. Możesz zrobić stałe pole klasy(po inicjalizacji na liście inicjalizacyjnej[!] pole nie może ulec zmianie). Możesz zrobić stały obiekt klasy z polem zadeklarowanym np:

mutable int _val;

Słowo kluczowe mutable umożliwia zmianę pola, gdy obiekt jest stały.

komentarz 31 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Ok, a wiesz gdzie znajde cos o seterach i geterach, ale jakos latwo wyjasnione. Bo takto moge zmienic klase na prywatna. To by bylo ok ale czy const nie jest stala dla zmiennej? A ja chcem przypisac cala klase...
komentarz 31 lipca 2016 przez Szykem2 Nałogowiec (29,510 p.)

settery i gettery to zwykłe metody. Pryzkład:

class A
{
    int x, y;

public:
    //gettery
    int getX() const {return x;}
    int getY() const {return y;}

    //settery
    void setX(int value) {x = value;}
    void setY(int value) {y = value;}
};

Co do consta to możesz mieś stałe pole klasy, albo stały obiekt tej klasy:

struct A
{
	const int a;

	A(int val) : a(val) {} //przypisanie wartości MUSI być na liście inicjalizacyjnej

};

struct B
{
	int b;
	B(int val) { b = val; }
};

struct C
{
	mutable int c;

	C(int val) { c = val; }
};

int main(int argc, char** argv)
{
	A a(30);
	a.a = 5; // błąd

	const B b(2);
	b.b = 3; //błąd

	const C c(2);
	c.c = 4; //OK
}
0 głosów
odpowiedź 31 lipca 2016 przez itcloud Gaduła (3,380 p.)
edycja 31 lipca 2016 przez itcloud

Jeśli masz klase (typ) Oko, to możesz utowrzyć jej instancję, czyli przypisanie do zmiennej referencyjnej obiektu klasy.

Np. Oko * numerJeden = new Oko();

Jest wtedy uruchamiany jednocześnie konstruktor (funkcja, tzn. metoda o nazwie Oko, ktora jest składnikiem klasy). A zmienne w klasie to jej składowe, np. "ilosc". Jeśli ta składowa będzie publiczna, to możesz się do niej dostać tak jak napisałeś:

numerJeden->ilosc

Ale lepiej aby te składowe (zmienne w klasie) były prywatne i dostajesz się do nich poprzez metody (tzw. settery czyli ustawiające jakaś wartość i gettery, zwracające wartości zmiennych składowych klasy).

EDIT:

ach te anglojęzyczne nazwy wtrącane do polskiej nowomowy.. Get - czyli coś pobierasz. Set - czyli coś ustawiasz. Stąd Getter, Setter.  Jak masz w klasie składowe prywatne, to właśnie tworzysz w tej klasie metody odczytujące i zapisujące.

 

komentarz 31 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Ale nastepny problem jak to zrobic, jesli calos mam w 2 pliach, czyli plik,h i plik.cpp, to juz wtedy innaczej bedzie no bo tu jest przyklad z klasa ktora jest w tym samym pliku co main()
komentarz 31 lipca 2016 przez Ehlert Ekspert (212,670 p.)

plik.h
 

#ifndef PLIK_H
#define PLIK_H

class Klasa
{
Klasa();
private:
void method(int);
};

#endif //PLIK_H

plik.cpp
 

#include "plik.h"

Klasa::Klasa(){
//...
}

void Klasa::method(int arg){
//...
}

plik main.cpp
 

#include "plik.h"

int main()
{
    Klasa obiekt;
}

 

komentarz 31 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Ok i w klasa::klasa(){} mam dac gettery i settery? a w void Methody?
1
komentarz 31 lipca 2016 przez Ehlert Ekspert (212,670 p.)

Oj chłopie. Odpal kanał zelenta i minuta po minucie zrób kurs obiektówki, bo z tego co czytam to nic nie chwytasz. sad

komentarz 31 lipca 2016 przez DragonCoder Nałogowiec (36,500 p.)

Normlanie w

Klasa::Klasa(int kasa, int zycie)
{
kasaDzik=kasa;
zycieDzik=zycie
} To robie tak, a z tego co widzę to konstruktor jest już w setterach

void setZycieDzik(int zycie)
{
zycieDzik=zycie;
}
int setZycieDzik()
{
return zycieDzik
} 
A wiec logicznie myslac powinno to bzc w miejscu konstruktora... Ale wole byc pewny

 

Podobne pytania

0 głosów
2 odpowiedzi 1,076 wizyt
0 głosów
1 odpowiedź 451 wizyt
pytanie zadane 25 stycznia 2017 w C i C++ przez robertwe Gaduła (4,620 p.)
0 głosów
1 odpowiedź 1,054 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...