>  기사  >  백엔드 개발  >  기술적 답변 객체 지향(C++ 클래스)에 대한 예비 이해

기술적 답변 객체 지향(C++ 클래스)에 대한 예비 이해

php是最好的语言
php是最好的语言원래의
2018-07-23 15:58:401505검색

C++에는 두 가지 종류의 멤버 데이터(정적, nostatic)가 있고 세 가지 종류의 멤버 함수(정적, nostatic, 가상)가 있다는 것을 알아야 합니다. 실제로 일반 멤버 함수의 경우 매개변수에 this 포인터가 있습니다. 이 포인터는 실제로 이 포인터를 통해 개체 자체를 가리킵니다. C++ 컴파일러는 어떤 객체가 클래스의 멤버 함수를 호출하는지 알게 됩니다.

C++ 클래스 객체의 멤버 변수와 멤버 함수는 함께 저장되나요? 그렇지 않다면?

C++에는 두 가지 종류의 멤버 데이터(정적, nostatic)가 있고 세 가지 종류의 멤버 함수(정적, nostatic, 가상)가 있다는 것을 알아야 합니다.
아래 사례를 보세요:

class A
{    int a;    int b;
};class B
{    int a;    int b;    static int c;
};class C
{    int a;    int b;    static int c;public:    void func() {}    static void pg() {}
};int main()
{    //1. 分析A对象占的内存
    A a;    cout << sizeof(a) << endl;  //结果是8

    //2. 分析B对象占的内存
    B b;    cout << sizeof(b) << endl;  //结果是8

    //3. 分析C对象占的内存
    C c;    cout << sizeof(c) << endl;  //结果是8

    return 0;
}

실제로 출력 결과를 바탕으로 다음과 같은 결론을 내립니다.
a. 멤버 변수:

#🎜🎜 ##🎜🎜 #
    일반 멤버 변수는 객체에 저장되며 strutc 변수와 동일한 메모리 레이아웃 및 바이트 정렬을 갖습니다.
  • 정적 멤버 변수가 저장됩니다. in 전역 데이터 영역
  • b에서 멤버 함수는 코드 세그먼트에 저장됩니다.

C++ 컴파일러는 클래스와 객체를 어떻게 관리하나요? 구체적으로, 객체는 클래스의 메서드를 호출합니다. C++ 컴파일러는 어떤 특정 객체가 어떤 멤버 메서드를 호출하는지 어떻게 구별합니까?#🎜 🎜##🎜 🎜#

실제로 일반 멤버 함수(정적 멤버 함수가 아님)의 경우 매개변수에 this 포인터가 있습니다. 이 포인터는 실제로 이 포인터를 통해 개체 자체를 가리킵니다. C++ 컴파일러는 어떤 객체가 클래스의 멤버 함수를 호출하는지 알게 됩니다.

기술적 답변 객체 지향(C++ 클래스)에 대한 예비 이해 요약하자면:
a C++ 클래스 개체의 멤버 변수와 멤버 함수는

b C++ 클래스의 일반 멤버 함수입니다. 그러나 정적 멤버 함수는 제외) 모두 현재 객체를 가리키는 this 포인터를 포함합니다. 정적 멤버 함수와 정적 멤버 변수는
d 클래스에 속합니다. 기능:

정적 멤버 함수에는 특정 개체를 가리키는 this 포인터가 포함되어 있지 않지만 일반 멤버 함수에는 특정 개체를 가리키는 포인터가 포함되어 있습니다.

기사 개요

다음 문제를 해결해야 합니다.
a C++ 클래스 개체의 멤버 변수와 멤버 함수가 함께 저장되어 있나요? 그렇지 않다면?

b. C++ 컴파일러는 클래스와 객체를 어떻게 관리합니까? 구체적으로, 객체는 클래스의 메서드를 호출합니다. C++ 컴파일러는 어떤 특정 객체가 어떤 멤버 메서드를 호출하는지 어떻게 구분합니까? 🎜#C++ 클래스 객체의 멤버 변수와 멤버 함수는 함께 저장되나요? 그렇지 않다면?

C++에는 두 가지 종류의 멤버 데이터(정적, nostatic)가 있고 세 가지 종류의 멤버 함수(정적, nostatic, 가상)가 있다는 것을 알아야 합니다.

아래 사례를 보세요:

class A
{    int a;    int b;
};class B
{    int a;    int b;    static int c;
};class C
{    int a;    int b;    static int c;public:    void func() {}    static void pg() {}
};int main()
{    //1. 分析A对象占的内存
    A a;    cout << sizeof(a) << endl;  //结果是8

    //2. 分析B对象占的内存
    B b;    cout << sizeof(b) << endl;  //结果是8

    //3. 分析C对象占的内存
    C c;    cout << sizeof(c) << endl;  //结果是8

    return 0;
}

실제로 출력 결과를 바탕으로 다음과 같은 결론을 내립니다.

a. 멤버 변수:
#🎜🎜 ##🎜🎜 #

일반 멤버 변수는 객체에 저장되며 strutc 변수와 동일한 메모리 레이아웃 및 바이트 정렬을 갖습니다.


정적 멤버 변수가 저장됩니다. in 전역 데이터 영역


    b에서 멤버 함수는 코드 세그먼트에 저장됩니다.
  • C++ 컴파일러는 클래스와 객체를 어떻게 관리하나요? 구체적으로, 객체는 클래스의 메서드를 호출합니다. C++ 컴파일러는 어떤 특정 객체가 어떤 멤버 메서드를 호출하는지 어떻게 구별합니까?#🎜 🎜##🎜 🎜#
  • 실제로 일반 멤버 함수(정적 멤버 함수가 아님)의 경우 매개변수에 this 포인터가 있습니다. 이 포인터는 실제로 이 포인터를 통해 개체 자체를 가리킵니다. C++ 컴파일러는 어떤 객체가 클래스의 멤버 함수를 호출하는지 알게 됩니다.

  • 요약하자면:
a C++ 클래스 개체의 멤버 변수와 멤버 함수는

b C++ 클래스의 일반 멤버 함수입니다. 그러나 정적 멤버 함수는 제외) 모두 현재 객체를 가리키는 this 포인터를 포함합니다. 정적 멤버 함수와 정적 멤버 변수는

d 클래스에 속합니다. 기능:
정적 멤버 함수에는 특정 개체를 가리키는 this 포인터가 포함되어 있지 않지만 일반 멤버 함수에는 특정 개체를 가리키는 포인터가 포함되어 있습니다.

관련 권장 사항:

기술적 답변 객체 지향(C++ 클래스)에 대한 예비 이해
Php 객체 지향 추상 클래스



PHP 객체에 대한 자세한 설명 지향 프로그래밍: 클래스 및 객체_PHP 튜토리얼

위 내용은 기술적 답변 객체 지향(C++ 클래스)에 대한 예비 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.