class object_1
{
public:
...
friend ofstream& operator<<(ofstream &out, const object_1 &obj_1);
friend object_2;
private:
char *pCh_mem1;
char *pCh_mem2;
int *pInt_mem1;
int *pInt_mem2;
};
class object_2
{
public:
...
friend ofstream& operator<<(ofstream &out, const object_2 &obj_2);
friend object_1;
};
Object1의 구현 파일이 일반적입니다. Ctor, Dtor 및 일부 메소드. 머리말에 메소드 선언을 게시하지 않았으므로 내 문제와 관련이 없습니다.개체 및 연산자 오버로드 C++
나는 개체 수명을 논의하는 것이 매우 중요합니다. 그것은 내가 정말로 알아야 할 것입니다. 무슨 일이 일어나고 main에서 object_2를 호출하면 연산자 오버로드 함수가 호출됩니다. 그럼 연산자 오버로드 함수가 호출됩니다 : 여기
ostream& operator<<(ostream& out, const object_2& obj_2)
{
object1::display(out) //Calls method display in object1's I.F.
return out;
}
우리는 다음과 같습니다
void object_1::display(std::ostream &out)
{
out << left << setw(28) << "Person" << setw(20) << "Place" ;
out << right << setw(5) << "Thing" << setw(5) << "Idea" << endl;
out << left << setw(28) << "----" << setw(20) << "--------" ;
out << right << setw(5) << "----- " << setw(5) << "------" << endl;
}
구현 파일의 맨 위에있는 IOMANIP 라이브러리. 그래서 setw (X)와 모든 것이 정의됩니다. 0은 모두 콘솔에 뿌리 내리고 있습니다. 내 물건이 범위를 벗어 났습니까? 나는 그렇게하기 전에 모든 것을 할 때 잘 동작하기 때문에 그렇게 생각한다. 즉,이 함수를 n e라고 부르면 연산자 오버로드의 본문 이외에 어디에서 작동하는지 알 수 있습니다. 나는 개체를 다시 선언되어 있기 때문에 생각 : 나는 내가 첫 번째 개체의 ctor에 메인에서 전달 된 정보를 인쇄하는 데 필요한 포맷 방법을 인쇄 한 후
ostream& operator<<(ostream& out, const object_2& obj_2);
; object_1. 그럴 때 우리는 비슷한 오버로드 함수와 같은 구현 파일에 있습니다. 제 개체 과부하 함수의 과부하 양 메소드를 호출 임 :
ostream& operator<<(ostream& out, const object_1& obj_1)
{
out << obj_1.pCh_mem1 << obj_1.pCh_mem2;
return out;
}
// 메인 object_2 obj_2 (4); 유 위 참조처럼라고 objc_2되면
static void method1()
{
//do stuff
}
static void method2()
{
//do stuff
}
static void method3()
{
//do stuff
}
int main(void)
{
method1();
method2();
method3();
cout << obj_2;
return 0; // and such
}
, object2의 클래스에 대한 연산자 오버로드는 다음 호출됩니다. 내 개인 회원은 불법적 인 운영으로 인해 사용할 수 없습니다. 나는 나의 질문을 추측한다. object2의 연산자 오버로딩 함수에서 object1의 개인 멤버를 어떻게 인쇄 할 수 있습니까? static_cast의? 나는 메인에서 무작위 발췌 문장을 가지고 있는데, 복잡하다. 나는 그것을 바꿀 수 없다. 난 당신이 위의 내용 참조처럼 수행하기 위해 노력했습니다 무엇
ostream& operator<<(ostream& out, const object_2& obj_2)
{
object1::display(out) //Calls method display in object1's I.F.
return out;
}
은 다른 객체의 메소드를 호출하고, 자신의 정보를 얻을 수 있습니다. 하지만 그 정보는 모두 NULL입니다! 하나의 I.F.에서 뛰어 다니고 있습니다. 다음과 그 모든 NULL에 !!
"object1"은 "object_1"과 같지만 "stock_1"은 "object_1"이라고 가정합니다. 그리고 "디스플레이"는 정적 방법입니까? 그것은 마지막 코드 스 니펫의 호출에서 정적 인 것처럼 보이지만 정의 ("stock"와 "object1"이 같은 경우)는 정적 메서드가 아닙니다. 이 일요일 아침 일찍 평소보다 느린 지 모르겠지만 코드 선택은 다소 혼란스러워 보입니다. –