2011-10-13 4 views
-3

일반 함수 (정적 함수가 아닌)는 C++의 클래스에 대해 하나의 복사본 만 가지므로 모든 개체가 동일한 복사본을 참조합니다. 그렇다면 정상 함수와 정적 함수의 차이점은 무엇입니까? 또한 교사는 "(object_name). (func_name)"표기법을 사용하여 클래스의 정적 함수를 호출 할 수는 없지만 "class_name :(func_name)"을 사용하여 호출해야한다고 말하면서 이것이 논리적이라는 것을 알고 있습니다. 해야 할 일이지만, 언어에 관한 한, (object_name). (func_name) 표기법을 사용하여 정적 함수를 호출 할 수 없습니까? 마지막으로, 클래스의 생성자 또는 클래스의 다른 함수 내부에서 클래스의 정적 데이터 멤버를 초기화 할 수는 없지만 클래스 외부에서 수행해야합니까?C++ 클래스의 함수에는 모든 객체에 대해 하나의 복사본 만 있습니까?

+0

정말 좋은 책을 추천합니다. C++과 관련 될 필요는 없습니다. 먼저 OO의 원칙을 이해해야합니다. 예 : 클래스 란 무엇이며 객체는 무엇입니까? 이것 옆. -1 나쁜 질문입니다. 읽을 수있는 질문을 게시하는 방법을 실제로 배워야합니다. – mkaes

+0

@mkaes, 그리고 어떤 선생님, 내가 객체 지향 프로그래밍의 원리를 이해하지 못한다고 생각하게 만듭니다. 클래스 란 무엇이며 객체는 무엇입니까? 언어에 관한 한, 나는 서둘러 있었기 때문에 나는 몹시 쓴다고 받아 들인다. – SegFault

답변

4

하나의 사본으로 모든 기능의 메모리 위치가 동일하면 그렇습니다. 차이점은 정적 함수는 개체를 호출하기 위해 인스턴스화 할 필요가 없다는 것입니다. 이것은 또한 클래스의 다른 비 정적 멤버에 액세스 할 수 없다는 것을 의미합니다.

초기화의 경우 정적 멤버에 액세스하는 정적 함수를 호출하려면 미리 호출해야하는 생성자가 필요하므로 생성자에서이를 수행 할 수 없습니다. 이를 보장 할 방법이 없습니다. 생성자 내부에서 정적을 변경할 수 있지만 다른 곳에서는 초기화해야합니다.

이 시나리오에 대한 생각 : (객체)로 함수를 호출에 관해서는

class A 
{ 
static int x; 
public: 
    A() 
    { 
     x = 3; 
    } 
    static int getX() 
    { 
     return x; 
    } 
} 

int main() 
{ 
    A::getX(); //what would x be here? It hasn't been initialized since A() was not called. 
} 

(기능) 대신 (클래스)의 :. :(기능), 나는 당신이 그것을 할 수있다 생각하지만, 왜 네가?

관련 문제