개발! 딱 깔끔하고 센스있게!

PHP 에서 c + 의 가상 함수는 무엇입니까? 본문

개발 스크랩 메모/PHP

PHP 에서 c + 의 가상 함수는 무엇입니까?

렉사이 2020. 12. 21. 02:40

이것은 추상함수 xxx 입니까?

내가 방금 테스트를 해봤는데, 사적인 방법도 가상적이라는 것 같습니까?

class a { private function test() { echo 1; } } class b extends a { private function test() { echo 2; } public function call() { $this->test(); } } $instance = new b; $instance->call(); 

출력 2

대답

PHP 에서 모든 비사유 함수는 가상적이므로, 표현할 필요가 없다.

구성원 함수 성명을 추상적으로 기류가 이루어지지 않는다는 의미지만 모든 파생류는 이뤄져야 한다.

방법을 추상적인 방법으로 정의하려면 C 에서 실행하는 것과 같은 + + 를 실행합니다

virtual void foo() = 0; 

이것은 단지 파생류가 반드시 foo () 를 실현해야 한다는 것을 의미한다

편집: 편집된 문제

b:: call() 에 접근할 수 없음 a:: test().따라서 사유 함수를 호출할 때, 이 종류의 함수를 호출할 수 있습니다.

편집:논평:

(위키백과)

In object-oriented programming, a virtual function or virtual method is a function or method whose behaviour can be overridden within an inheriting class by a function with the same signature.

C + + 에서 현명한 성명에 필요한 비용을 지불해야 하기 때문에 함수 성명을 허용하여 파생류 재작성 함수를 허용해야 합니다.

class Foo{ public: void baz(){ std::cout << "Foo"; } }; class Bar : public Foo{ public: void baz(){ std::cout << "Bar"; } }; int main(){ Foo* f = new Bar(); f->baz(); //baz is not virtual in Foo, so the output is Foo } 

가상 2

class Foo{ public: virtual void baz(){ std::cout << "Foo"; } }; //Same Bar declaration int main(){ Foo* f = new Bar(); f->baz(); //baz is virtual in Foo, so the output is Bar as it will call the derived function } 

주의, 위에서 예시 된 변수 f 는 Bar * 또는 Bar 타입이라면 Foo:: baz () 가 가상인지 이미 알려진 예기형 (프로그래머 현식적으로 제공해) 모두 무관하다

Comments