멤버 함수가 아니지만 클래스의 내부 데이터에 접근할 수 있음.
class myClass{
friend void sub(); // 요게 friend
};
void sub()
{
~~~
}
원형은 내부에 정의되지만 본체는 외부에서 따로 정의된다*
마찬가지로 클래스 내부 데이터 접근 가능
class Employee{
friend class Manager;
};
반환형 operator연산자(매개변수 목록)
{
...
}
1. 멤버 함수
2. 비멤버 함수(friend)
연산자를 멤버, 비멤버 함수로 정의 해보자.
class myClass{
public:
int a;
myClass(int num): a(num){};
myClass operator+(const myClass& cls);
}
myClass operator+(const myClass& cls){
myClass obj(a + cls.a);
return obj;
}
class myClass{
publid:
int a;
myClass(int num): a(num){};
friend myClass operator+(const myClass& cls1, const myClass& cls2);
}
myClass operator+(const myClass& cls1, const myClass& cls1){
myClass obj(cls1.a + cls2.a);
return obj;
}
class myClass{
publid:
int a;
myClass(int num): a(num){};
myClass operator=(const myClass& cls);
}
myClass& operator=(const myClass& cls){
this->a = cls.a;
return *this;
}
class myClass{
publid:
int a;
myClass(int num): a(num){};
friend bool operator==(const myClass& cls1, const myClass& cls2);
}
bool operator==(const myClass& cls1, const myClass& cls1){
return cls1.x == cls2.x
}
반드시 비멤버 함수로 작성
멤버함수로 정의하면 << 왼쪽에 객체가 와야하는데 그럼 틀림.
class myClass{
publid:
int a;
myClass(int num): a(num){};
friend ostream& operator<<(ostream os, const myClass& cls);
friend istream& operator<<(istream is, const myClass& cls);
}
ostream& operator<<(ostream os, const myClass& cls){
os << cls.x << endl;
return os;
}
istream& operator<<(istream is, const myClass& cls){
is >> cls.x;
return is;
}
타입 변환
변환 생성자 - 매개변수가 하나인 생성자를 사용해서 다른 타입을 우리의 클래스 타입으로 변경
변환 연산자 - 클래스 타입을 다른 타입으로 자동 변환
변환 생성자
class book{
public:
int isbn;
string title;
book(){
isbn = 0;
string = "unknown";
}
book(int isbn){
this->isbn = isbn;
this->title = "unknown";
}
int main(
book b1 = 9123232;
}
class book{
public:
int isbn;
string title;
book(){
isbn = 0;
string = "unknown";
}
book(int isbn){ ## 변환 생성자
this->isbn = isbn;
this->title = "unknown";
}
operator int() const{ ## 변환 연산자
return isbn;
}
}
int main(
book b1 = 91823213;
int isbn = b1;
}