Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

neocekivani rezultati

[es] :: C/C++ programiranje :: neocekivani rezultati

[ Pregleda: 2987 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pretender

Član broj: 12407
Poruke: 100
*.ppp-bg.sezampro.yu



Profil

icon neocekivani rezultati18.04.2004. u 01:24 - pre 243 meseci
Code:

//: C05:Friend.cpp
// Friend allows special access

#include <iostream>
using namespace std;

// Declaration (incomplete type specification):
struct X;

struct Y {
void f(X*);
};

struct X { // Definition
private:
int i;
public:
void initialize();
friend void g(X*, int); // Global friend
friend void Y::f(X*); // Struct member friend
friend struct Z; // Entire struct is a friend
friend void h();
};

void X::initialize() {
i = 0;
}
void g(X* x, int i) {
x->i = i;
}
void Y::f(X* x) {
x->i = 47;
}

struct Z {
private:
int j;
public:
void initialize();
void g(X* x);
void q(X* x);
};

void Z::initialize() {
j = 99;
}
void Z::g(X* x) {
x->i += j;
}
void Z::q(X* x) {
cout << "Z::j == " << j << endl;
cout << "X::i == " << (x -> i) << endl;

void h() {
X x;
x.i = 100; // Direct data manipulation
}

int main() {
X x;
Z z;
z.g(&x);
z.q(&x);
getchar();
} ///:~


out:
Z::j == 4370432
X::i == 8740868

Dobiju se ove adrese (i to ne u hex), umesto integera 99 i 100, zasto?

TX
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.glfd.dial.virgin.net



+4 Profil

icon Re: neocekivani rezultati18.04.2004. u 02:06 - pre 243 meseci
Konstruktori klasa kod tebe ne postoje, a nigde ni ne pozivash initialize(). Zato i dobijash nebulozne (random) vrednosti, member varijable nisu inicijalizovane.
 
Odgovor na temu

darkosos
Darko Šoš
Beograd

Član broj: 5053
Poruke: 1131
*.ptt.yu



+64 Profil

icon Re: neocekivani rezultati18.04.2004. u 07:37 - pre 243 meseci
Nisam znao da u struct-u ima private i public?
A i nije mi do kraja jasna poenta - napisati malo koda sa puno konfuzije?
K'o što reče Nasty, ili pozivaj odgovarajuće Initialize funkcije direktno ili napiši konstruktore koji ih pozivaju, pa će se inicijalizovati indirektno.
 
Odgovor na temu

Pretender

Član broj: 12407
Poruke: 100
*.ppp-bg.sezampro.yu



Profil

icon Re: neocekivani rezultati18.04.2004. u 15:01 - pre 243 meseci
U pravu ste, ali ovo je primer iz 'Thinkin in C++', ja sam samo umetnuo f-ju Z::q.
Nemam bas iskustva sa strukturama (nisam ni znao da imaju konstruktore), ali sad vidim da nema poziva initialize().
Istina, u ovom delu knjige jos nisu obradjene klase i konstruktori, ali ne znam kako je autor mislio da ovo radi.
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.in-addr.btopenworld.com



+4 Profil

icon Re: neocekivani rezultati18.04.2004. u 15:08 - pre 243 meseci
Struktura ti je isto shto i klasa (male razlike u default pristupu : kod strukture se podrazumeva public, kod klase private, itd.), tako da sve shto radish sa klasom mozhesh i sa strukturom. Ukljuchujuci i konstruktor/destruktor koji bih ti preporuchio u tvom primeru. :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: neocekivani rezultati

[ Pregleda: 2987 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.