2011-10-24 3 views
2

코드베이스가 거대한이기 때문에 어떤 방법론을 사용하는지 모르겠습니다.이름이 클래스 이름 자체 인 호출 함수?

class ABC { 
    member_func(string c); 
}; 

main() { 
    ABC("").member_func("this random string"); 
} 

ABC("");를 호출 할 수있게 것이다 누락 된 코드는 무엇입니까 :

그것은이 같은 클래스를 정의?

어디서나 생성 된 클래스의 객체를 보지 못했습니다.

+0

정의 된 함수 나 펑터가 없습니다. –

+0

함수 호출 또는 생성자입니까? 그것들 중 하나 일 수 있습니다. –

답변

4

단순히 ABC 유형의 개체를 생성하지만 해당 개체의 영구 메모리 위치는 초기화하지 않습니다. 즉, ABC 생성자에 대한 호출을 생성하는 초기화 된 객체는 임시이며 호출 후 호출 될 수있는 메모리 위치에 생성되지 않기 때문에 호출 후에 손실됩니다. 호출 후 자동 변수, 정적 메모리 위치 등. 그래서 "실세계"에서 사용할 수있는 것과 같은 호출을하는 "누락 된"코드는 나중에 액세스 할 수 있도록 구성된 실제 이름입니다. 예를 들어 ABC my_object(""); 또는 ABC my_object = ABC("");.

UPDATE : 당신이 게시 한 업데이트 된 코드에서, 무슨 일어나고은 다시 임시에 호출되고 구성되는 유형 ABC의 임시 객체, 다음 member_func라는 클래스 ABC의 비 정적 방법 그것은 ABC의 생성자에 대한 호출에 의해 생성되었습니다. 이 코드가 "실제 세계"에서 어떤 의미를 갖는지는 물론, member_func에 대한 호출은 클래스 인스턴스 외부에서 볼 수있는 부작용을 포함해야합니다. 즉, 클래스 인스턴스에 데이터 멤버가 포함될 수 있습니다 즉 호출이 수정하는 공유 메모리 객체에 대한 포인터). 게시 한 코드 샘플에서는 호출의 부작용이없는 것 같지만, 이는 의도적이지 않은 모든 작업과 목적을위한 것입니다 ... ABC 임시 인스턴스가 만들어지면 호출되는 메서드가 있습니다. 인스턴스에 대한 참조는 현재 main() 범위에서 액세스 할 수있는 메모리 위치에 구성되지 않았기 때문에 손실됩니다.

+0

실제 호출은 ABC ("")가 아닙니다. Buts its ABC (""). member_func(); 실례를 묻는 질문 자체에서 그것을 업데이트하겠습니다. – PnotNP

+0

bjarne stroustroup 도로를 내려간 후, C++의 미묘하고도 중요한 개념 중 하나가 임시 변수 **라고 생각했습니다. – PnotNP

3
class ABC 
{ 
    std::string d; 
public: 
    ABC(std::string x)   // For the ABC(""). 
    { d = x; } 

    void foo(std::string x) // For the foo(""). 
    { std::cout << d << std::endl << x << std::endl; } 
}; 

int main() 
{ 
    ABC("This creates a temporary object.").foo("This calls foo()."); 

    // Is the same as... 

    { 
     ABC obj("This creates another object."); 
     obj.foo("This calls obj.foo()."); 
    } // obj is destroyed. 

    return(0); 
} 

자명하다 ... 나는 희망한다. :)