Sabtu, 17 April 2010

Cpp friend

#include
#include

//--------------------------
/* Deklarasi awal agar dikenali kode di bawahnya*/
class Titik;
class KelasTeman;

//--------------------------
/* Deklarasi kelas Teman tanpa badan metode karena nilai x dan y dari kelas Titik belum dideklarasikan maka badan program metode printTitik() harus diletakkan setelah badan program kelas Titik*/

class Teman{

private:
int teman;

public:
Teman();
void printTitik(const Titik &t);

/*kelas teman*/
friend class KelasTeman;

};

//--------------------------
// Deklarasi awal agar dikenali kode dibawahnya
class Titik3D;

//--------------------------
// Badan program kelas Titik
class Titik{

private:
int x; /*koordinat x*/
int y; /*koordinat y*/

public:
Titik(){
/*konstruktor*/
x = 0;
y = 0;
}

Titik(int xp, int yp){
/*konstruktor*/
x = xp;
y = yp;
}

void setX(int xp){
/*mengembalikan nilai x*/
x = xp;
}

void setY(int yp){
/*mengembalikan nilai y*/
y = yp;
}

/*fungsi friend*/
friend void tampilkanTitik(Titik t1, Titik3D t2);
/*metode friend*/
friend void Teman::printTitik(const Titik &t);
};
//--------------------------
/* Badan program metode-metode pada kelas Teman */

Teman::Teman(){
/*konstruktor*/
teman = 89;
}

/*metode friend*/
void Teman::printTitik(const Titik &t){
std::cout << "Metode Friend\n";
std::cout << "Titik : x : " << t.x << " y : " << t.y << "\n";
std::cout << "----------------------------------------\n";
}

//--------------------------
//Badan program kelas Titik3D

class Titik3D : public Titik{

private:
int z; // koordinat z

public:
Titik3D(){
/*konstruktor*/
z = 0;
}

Titik3D(int xp, int yp, int zp){
/*konstruktor*/
setX(xp);
setY(yp);
z = zp;
}

/*fungsi friend*/
friend void tampilkanTitik(Titik t1, Titik3D t2);

protected:
int getZ(){
/*mengembalikan nilai z*/
return z;
}
};

//--------------------------

/*fungsi friend*/
void tampilkanTitik(Titik t1, Titik3D t2){
std::cout << "Fungsi Friend\n";
std::cout << "Titik : x : " << t1.x << " y : " << t1.y << "\n";
std::cout << "Titik3D : x : " << t2.x << " y : " << t2.y << " z : " << t2.getZ() << "\n";
std::cout << "----------------------------------------\n";
}
//--------------------------
//Badan program kelas KelasTeman
class KelasTeman{

public:
KelasTeman(){
/*konstruktor*/

}

void aksesTeman(Teman tm){
std::cout << "Kelas Friend\n";
std::cout << "Nilai teman : " << tm.teman << "\n";
std::cout << "----------------------------------------\n";
}

};

//--------------------------

int main(){
//--------------------------
// tes fungsi friend
Titik t1(28, 1);
Titik3D t2(28, 1, 7);

tampilkanTitik(t1, t2);

//--------------------------
// tes metode friend
Teman f;

f.printTitik(t1);

//--------------------------
// tes kelas teman
Teman t;
KelasTeman kt;

kt.aksesTeman(t);
//--------------------------
return 0;

}

//--------------------------