-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfriend.cpp
107 lines (82 loc) · 1.71 KB
/
friend.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
using namespace std;
/*
friend --> shared globally function
(1) global fonksiyon friend member fonksiyon olabilir
(2) class A fonksiyonu class B de tanımlanabilir
(3) bir sınıfın başka bir sınıf da tanımlanması
*/
//ex1
/*
class MyClass {
private:
int x;
public:
friend void func(int);
};
void func(int a){
MyClass m2;
m2.x = 2; // friend fonksiyonun içinde sınıfa ait bütün değerlere erişebiliriz.
cout<<"a:"<<a<<endl;
}
int main (){
MyClass m1;
func(4);
}
*/
//ex2
/*
class Box{
private:
double width;
public:
friend void printWidth(Box box);
void setWidth(double wid);
};
void Box::setWidth(double wid) {
width = wid;
}
void printWidth(Box box) {
cout<<"width:"<<box.width<<endl;
}
int main(){
Box box;
box.setWidth(5.0);
printWidth(box);
}
*/
//ex3
// operator overloading and friend
/*
(1) olmayan bir operator overload edemeyiz
(2) doğal türler için operator overloading yoktur.
(3) her operator overload edilemez (::, sizeof, . , *)
(4) bazı operatorler overload edilebilir sınıf içinde
ama global alanda edilemezler.
(5) () default arguman alabiliyor ama diğerleri alamaz
(6) operator öncelikleri değiştirilemez
MyClass operator()()
MyClass operator+()
*/
class MyClass {
private:
int x;
void operator-(const MyClass &r) {
cout<<"operator is calling"<<endl;
}
public:
friend void func();
void operator+(const MyClass &r) {
cout<<"operator is calling"<<endl;
}
};
void func(){
MyClass m1,m2;
m1-m2;
}
int main(){
MyClass m1,m2;
m1+m2;
func();
}
//special int