2017-12-18 14 views
-7

위임을 C++로 이해하려고합니다. 나는 "위임은 기능에 대한 포인터"라고 읽었으며 몇 가지 예를 보았지만 불행히도 나는 그것을 얻을 수 없다. 나는 프로그래밍을하는 동안 그것을 이해할 것이라고 생각 했으므로 시도 할 코드를 만들었습니다. 불행히도 나는하지 않았다. C++의 위임

#include <iostream> 
using namespace std; 

class person{ 
    private: 
     int age; 
    public: 
     person(age){ 
      this->age = age; 
     } 

     // virtual void changeAge(int arg) = 0; 
}; 

class addNumber { 
    public: 
     int changeAge(int arg) { 
      arg += arg+1; 
     } 
}; 

int main(){ 
    person Olaf; 
} 

는 그래서 노력이 source에 따라 :

Olaf = &addNumber::changeAge(10); 

또는

addNumber test; 

Olaf = &addNumber::changeAge(10); 

가 모두 작동하지 않습니다. 즉, 프로그램이 컴파일되지 않습니다. changeNameaddNumber의 인스턴스 메소드를 사용하여 인스턴스 객체 클래스의 나이를 변경하는 객체를 만들고 싶습니다.

+1

* "... 위임은 ​​기능에 대한 포인터입니다."... "- 어디에서 읽었습니까? – WhiZTiM

+1

귀하의 질문은 무엇입니까? – EvilTeach

+0

"_Both does not work._"가 무엇을 의미하는지 정의하십시오. –

답변

1

먼저, 함수에 대한 형식 정의를 사용하자 :

typedef int agechanger(int); 

이 주위 함수 인스턴스를 전달하는 코드에서 사용할 수있는 새로운 유형 agechanger을합니다.

이제 person 클래스에 적절한 생성자를 제공하고 공개 getter를 제공하는 age 필드를 올바르게 캡슐화해야합니다. 그런 다음 함수를 인수로 받아들이는 메서드 인 agechanger의 함수를 추가하십시오.

class person 
{ 
private: 
    int age; 
public: 
    person(int age){ 
     this->age = age; 
    } 

    int getAge() const { 
     return age; 
    } 
    void changeAge(agechanger f) 
    { 
     age = f(age); 
    } 
}; 

는 그런 다음 class 안에 우리의 유형에 맞는 기능을 정의 : 함수가 static로 표시 한만큼 증가 전달 int 반환되는

class addNumber { 
public: 
    static int changeAge(int arg) { 
     return arg + 1; 
    } 
}; 

알 수 있습니다. main에서

하자 테스트의 모든 :

int main() 
{ 
    person Olaf(100); //instance of person, the old Olaf 

    Olaf.changeAge(addNumber::changeAge); //pass the function to the person method 

    std::cout << Olaf.getAge() << std::endl; //Olaf should be even older, now 
} 

만들자 및 클래스 ouside, 다른 기능을 사용하는이 시간 :

int younger(int age) 
{ 
    return age -10; 
} 

int main(){ 

    person Olaf(100); 

    Olaf.changeAge(younger); 

    std::cout << Olaf.getAge() << std::endl; // Olaf is much younger now! 
} 

나는 희망을 것입니다 작동 코드를 가진 더 잘 이해하는 데 도움이됩니다. 여기서 묻는 주제는 일반적으로 고급으로 간주되는 반면 C++의 기본 주제 (예 : functionsclasses)를 검토해야합니다.