#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;
}
//--------------------------