Strona 1 z 1
C++ wyświetlanie zmiennej private
: 14 sie 2009, 12:14
autor: patlas
Witam
Próbuje ostatnio swoich sił w c++ (znam dość dobrze C ale to nie wystarcza)
Moj problem polega na tym iż tworze sobie objekt klasy "moja" za pomocą konstruktora (który odrazu zmienia wartość zmiennej private: int liczba1). Teraz za pomocą funkcji klasy moja::pokaz chce wyświetlic wartość zmiennej liczba1 dla podanego objektu klasy jako argument

(napewno zawile to opisuje więc oto kod: )
Kod: Zaznacz cały
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
class moja
{
private:
int liczba1;
public:
void pokaz(moja & objekt); // <- co dać tutaj jako argument funkcji żeby móc dobrać się do zmiennej liczba1 dla konkretnego obiektu (który podany będzie jako argument)
moja(int wartosc); // konstruktor zmieniający wartość zmiennej priwate na inną
};
moja::moja(int wartosc)
{
liczba1 = wartosc;
}
void moja::pokaz(objekt) /// <- co trzeba zmienić rółniej w tym prototypie funkcji ??
{
cout<< "wartość zmiennej private to:" <<objekt.liczba1<<endl;
}
int main(void)
{
moja a(10); //tworzenie obiektu klasy moja i przypisanie zmiennej liczba1 wartość 10 (konstruktor)
pokaz(a); //<- w tym miejscu chce jako artument funkcji wstawić obiekt klasy aby wyświetlić wartość zmiennej liczba1
return 0;
}
Odp: C++ wyświetlanie zmiennej private
: 14 sie 2009, 12:35
autor: JoeBuck
zamień na:
Potem
Kod: Zaznacz cały
void moja::pokaz(objekt) /// <- co trzeba zmienić rółniej w tym prototypie funkcji ??
{
cout<< "wartość zmiennej private to:" <<objekt.liczba1<<endl;
}
Zamień na:
Kod: Zaznacz cały
void moja::pokaz()
{
cout<< "wartość zmiennej private to:" <<liczba1<<endl;
}
A funkcję pokaz wywołaj tak:
Odp: C++ wyświetlanie zmiennej private
: 14 sie 2009, 15:35
autor: patlas
Tylko że ja chciałbym przekazać objekt klasy jako argument funkcji

Odp: C++ wyświetlanie zmiennej private
: 14 sie 2009, 16:07
autor: simonnam
patlas pisze:Tylko że ja chciałbym przekazać objekt klasy jako argument funkcji

Ale po co? Jak chcesz poznać wartość liczba1, to po prostu wywołujesz funkcję
A jak już tak bardzo chcesz w programie (w main) funkcję wywołać jako
to funkcja
pokaz nie może być funkcją składową klasy, a np. funkcją globalną:
Kod: Zaznacz cały
void pokaz(moja & obiekt)
{
cout << "wartość zmiennej private to:" << obiekt.liczba1
}
Odp: C++ wyświetlanie zmiennej private
: 14 sie 2009, 16:15
autor: patlas
Tak tylko że zmienna
liczba1 jest zmienną "PRIVATE" i w tym cały problem

Odp: C++ wyświetlanie zmiennej private
: 14 sie 2009, 16:41
autor: Tares
Zmodyfikuj funkcję pokaz by wywoływała obiekt.pokaz() zamiast obiekt.liczba1 i powinno być tak jak chcesz.
Odp: C++ wyświetlanie zmiennej private
: 14 sie 2009, 17:12
autor: adrian5632
Ech... ale mu mieszacie...
Wystarczy, że dodasz modyfikator
static w deklaracji metody
pokaz - będzie ona wtedy niezależna od instancji (globalna dla całej klasy, a nie konkretnego obiektu). A w funkcji main wywołując tę metodę musisz poprzedzić ją nazwą klasy.
Tutaj działający kod:
Kod: Zaznacz cały
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
class moja
{
private:
int liczba1;
public:
static void pokaz(moja & objekt);
moja(int wartosc);
};
moja::moja(int wartosc)
{
liczba1 = wartosc;
}
void moja::pokaz(moja &objekt) /// <- co trzeba zmienić rółniej w tym prototypie funkcji ?? - nic :P
{
cout<< "wartość zmiennej private to:" <<objekt.liczba1<<endl;
}
int main(void)
{
moja a(10); //tworzenie obiektu klasy moja i przypisanie zmiennej liczba1 wartość 10 (konstruktor)
moja::pokaz(a); //<- w tym miejscu chce jako artument funkcji wstawić obiekt klasy aby wyświetlić wartość zmiennej liczba1
return 0;
}
EDIT:
Napisał patlas Zobacz post
Tylko że ja chciałbym przekazać objekt klasy jako argument funkcji
Ale po co? Jak chcesz poznać wartość liczba1, to po prostu wywołujesz funkcję
A ty jak zaczynałeś zabawę z C++, to nie próbowałeś różnych rzeczy? Może kolega chce poćwiczyć i porobić doświadczenia? - Ja sam tak zaczynałem.
EDIT:
PS
Piszemy ob
iekt, a nie objekt

Odp: C++ wyświetlanie zmiennej private
: 14 sie 2009, 21:38
autor: patlas
Dokładnie robie to tylko w celach naukowych (konkretnie nie potrzebuje pisać programów pod konsole bo do takowych wystarcza C

ale niestety chce się bawić z interfejcem GUI w QT a tam trzeba C++

)
P.S Wiem że piszemy obiekt

Napisałem objekt żeby wyróżniało się od reszty programu
Wszystkim wielkie dzięki za pomoc

Odp: C++ wyświetlanie zmiennej private
: 15 sie 2009, 13:55
autor: el.pescado
Ale po co? Jak chcesz poznać wartość liczba1, to po prostu wywołujesz funkcję
Jak chce argument to znaczy że chce argument. Może chce wywołać funkcję z trzema obiektami jako argumenty. Nie da się wywołać metody na rzecz trzech obiektów na raz.
Oto mój program:
Kod: Zaznacz cały
#include <iostream>
class A
{
public:
A (int a);
private:
int num;
public:
void display (A& a);
};
A::A (int a)
: num(a)
{
}
void A::display (A& a)
{
std::cout << "Mine: " << num << " Other: " << a.num << std::endl;
}
int main (int argc, char *argv[])
{
A a(7);
A b(8);
a.display (b);
return 0;
}
Na oko wygląda dokładnie tak samo, ale kompiluje się i działa:
Kod: Zaznacz cały
przemek@kfiatek:~$ g++ -Wall -o test test.cpp
przemek@kfiatek:~$ ./test
Mine: 7 Other: 8
Może to jest kwestia kompilatora - u mnie jest GCC 4.1.3.
EDIT:
PS. Możesz też odwoływać się do pól prywatnych danej klasy w dowolnej funkcji (nawet metodzie innej klasy), pod warunkiem, że daną funkcję
zaprzyjaźnisz z daną klasą. Poczytaj o słowie kluczowym
friend.
Odp: C++ wyświetlanie zmiennej private
: 17 sie 2009, 17:30
autor: mikolajs
Ciekawy kod. Można sobie w metodzie A::display dowolnie modyfikować dane z innego obiektu. Czy to nie jest błąd kompilatora i czy nie narusza zasadę enkapsulacji?
Odp: C++ wyświetlanie zmiennej private
: 17 sie 2009, 17:49
autor: adrian5632
mikolajs pisze:Ciekawy kod. Można sobie w metodzie A::display dowolnie modyfikować dane z innego obiektu. Czy to nie jest błąd kompilatora i czy nie narusza zasadę enkapsulacji?
Nie? Ponieważ metoda należy do klasy, więc może modyfikować jej zmienne, a statyczne mają to do siebie, że są niezależne od obiektu. To tak samo słowo kluczowe friend - też niby błąd? Nie, a niby 'narusza' wspomnianą zasadę.
// " Dokładnie, z tym że metoda A::display nie jest statyczna."
- Chodziło mi o poprawioną przeze mnie metodę
pokaz 
Odp: C++ wyświetlanie zmiennej private
: 17 sie 2009, 20:10
autor: el.pescado
Dokładnie, z tym że metoda A::display nie jest statyczna.