문제

이 질문은 C#/.Net의 맥락에서 이미 요청되었습니다..

이제 C++에서 구조체와 클래스의 차이점을 배우고 싶습니다.OO 디자인에서 둘 중 하나를 선택하는 이유와 기술적 차이점에 대해 토론해 보세요.

분명한 차이점부터 시작하겠습니다.

  • 지정하지 않으면 public: 또는 private:, 구조체의 멤버는 기본적으로 공개됩니다.클래스의 멤버는 기본적으로 비공개입니다.

나는 C++ 사양의 모호한 구석에서 다른 차이점을 찾을 수 있다고 확신합니다.

도움이 되었습니까?

해결책

클래스와 구조체 사이의 까다로운 두 번째 차이점을 잊어버렸습니다.

표준(C++98부터 C++11까지의 §11.2.2)을 인용해 보세요.

없는 경우 액세스 지정자기본 클래스의 경우 파생 클래스가 선언 될 때 대중이 가정됩니다. 구조체 클래스가 선언되면 비공개로 가정됩니다. 수업.

그리고 완전성을 기하기 위해 클래스와 구조체 사이의 더 널리 알려진 차이점은 (11.2)에 정의되어 있습니다.

키워드로 정의 된 클래스의 구성원 수업 ~이다 사적인 기본적으로.키워드로 정의 된 클래스의 구성원 구조체 또는 노동 조합~이다 공공의 기본적으로.

추가 차이점:키워드 class 템플릿 매개변수를 선언하는 데 사용할 수 있지만 struct 키워드는 그렇게 사용할 수 없습니다.

다른 팁

인용 C++ FAQ,

7.8] 키워드 구조와 클래스의 차이점은 무엇입니까?

구조물의 멤버와 기본 클래스는 기본적으로 공개적이며, 클래스는 기본적으로 비공개로 있습니다.메모:기본 클래스는 기본값에 의존하기보다는 명시 적으로 공개, 개인 또는 보호를 제공해야합니다.

구조물과 클래스는 그렇지 않으면 기능적으로 동일합니다.

좋아, 그 삐걱 거리는 깨끗한 테크노 토크.감정적으로, 대부분의 개발자는 수업과 구조물을 강력하게 구별합니다.구조물은 단순히 캡슐화 또는 기능에 방해가 거의없는 개방형 비트 더미처럼 느껴집니다.수업은 지능적인 서비스, 강력한 캡슐화 장벽 및 잘 정의 된 인터페이스를 가진 사회의 살아있는 책임있는 사회 구성원처럼 느껴집니다.그것은 대부분의 사람들이 이미 가지고있는 의미이기 때문에, 방법이 거의없고 공개 데이터가있는 클래스가 있다면 구조적 키워드를 사용해야 할 것입니다 (그러한 것은 잘 설계된 시스템에 존재합니다!). 그렇지 않으면 클래스를 사용해야 할 것입니다. 예어.

C++의 기원과 C와의 호환성을 기억해 두는 것이 좋습니다.

C에는 구조체가 있고 캡슐화 개념이 없으므로 모든 것이 공개됩니다.

기본적으로 공개되는 것은 일반적으로 객체 지향 접근 방식을 취할 때 나쁜 생각으로 간주되므로 기본적으로 OOP에 도움이 되는 C 형식을 만들 때(C에서 OO를 수행할 수 있지만 도움이 되지 않음) C++(원래 "C With Classes")의 아이디어에 따르면 기본적으로 멤버를 비공개로 설정하는 것이 합리적입니다.

반면에 Stroustrup이 다음의 의미를 변경했다면 struct 멤버가 기본적으로 비공개였기 때문에 호환성이 손상되었을 것입니다(표준이 갈라진 만큼 더 이상 사실이 아니지만 모든 유효한 C 프로그램은 또한 유효한 C++ 프로그램이었으며 이는 C++에 발판을 제공하는 데 큰 영향을 미쳤습니다).

그래서 새로운 키워드, class 구조체와 똑같도록 도입되었지만 기본적으로 비공개입니다.

C++가 아무런 기록 없이 처음부터 나왔다면 아마도 그러한 키워드가 하나만 있을 것입니다.또한 아마도 그것이 가져온 영향을 미치지 않았을 것입니다.

일반적으로 사람들은 C에서 구조체가 사용되는 방식과 같은 작업을 수행할 때 구조체를 사용하는 경향이 있습니다.공용 멤버, 생성자 없음(공용체에 속하지 않는 한 ~할 수 있다 클래스와 마찬가지로 구조체에 생성자가 있지만 사람들은 그렇지 않은 경향이 있습니다), 가상 메소드가 없습니다.언어는 기계에 지시하는 것만큼 코드를 읽는 사람들과 의사소통하는 역할도 하므로(그렇지 않으면 우리는 어셈블리 및 원시 VM 연산 코드를 고수할 것입니다) 이를 고수하는 것이 좋습니다.

클래스의 멤버는 기본적으로 비공개입니다.Sstruct의 멤버는 기본적으로 공개됩니다.그 외에 다른 차이점은 없습니다.또한 참조하십시오 이 질문.

Stroustrup에 따르면 C++ 프로그래밍 언어:

어떤 스타일을 사용하는지는 상황과 취향에 따라 다릅니다.나는 보통 사용하는 것을 선호합니다 struct 모든 데이터가 공개된 클래스의 경우.나는 그러한 클래스를 "적절한 유형은 아니고 단지 데이터 구조"라고 생각합니다.

기능적으로는 퍼블릭/프라이빗 외에는 차이가 없습니다.

STRUCT는 구조 사양에 따라 특정 메모리 청크를 나누는 추상 데이터 유형의 한 유형입니다.구조체는 파일 직렬화/역직렬화에 특히 유용합니다. 구조는 종종 파일에 그대로 기록될 수 있기 때문입니다.(즉.구조체에 대한 포인터를 얻고 SIZE 매크로를 사용하여 복사할 바이트 수를 계산한 다음 구조체 내부 또는 외부로 데이터를 이동합니다.)

클래스는 정보 숨기기를 보장하는 다른 유형의 추상 데이터 유형입니다.내부적으로는 다양한 기계 가공, 방법, 임시 변수, 상태 변수가 있을 수 있습니다.등.이는 모두 클래스를 사용하려는 모든 코드에 일관된 API를 제공하는 데 사용됩니다.

실제로 구조체는 데이터에 관한 것이고 클래스는 코드에 관한 것입니다.

그러나 이는 단지 추상화일 뿐이라는 점을 이해해야 합니다.클래스와 매우 유사한 구조체와 구조체와 매우 유사한 클래스를 만드는 것은 완벽하게 가능합니다.실제로 초기 C++ 컴파일러는 C++ 코드를 C로 변환하는 사전 컴파일러에 불과했습니다.따라서 이러한 추상화는 논리적 사고에 도움이 되지만 반드시 컴퓨터 자체에 자산이 되는 것은 아닙니다.

각각이 서로 다른 유형의 추상화라는 사실 외에도 클래스는 C 코드 명명 퍼즐에 대한 솔루션을 제공합니다.동일한 이름으로 노출되는 함수가 두 개 이상일 수 없기 때문에 개발자는 _() 패턴을 따랐습니다.예를 들어mathlibextreme_max().API를 클래스로 그룹화하면 유사한 기능(여기서는 "메서드"라고 함)을 함께 그룹화하고 다른 클래스의 메서드 이름 지정으로부터 보호할 수 있습니다.이를 통해 프로그래머는 코드를 더 잘 구성하고 코드 재사용을 늘릴 수 있습니다.이론적으로는 적어도.

1) 클래스의 멤버는 기본적으로 비공개이고 구조체의 멤버는 기본적으로 공개입니다.

예를 들어 프로그램 1은 컴파일에 실패하고 프로그램 2는 정상적으로 작동합니다.

// Program 1
#include <stdio.h>

class Test {
    int x; // x is private
};
int main()
{
  Test t;
  t.x = 20; // compiler error because x is private
  getchar();
  return 0;
}
Run on IDE
// Program 2
#include <stdio.h>

struct Test {
    int x; // x is public
};
int main()
{
  Test t;
  t.x = 20; // works fine because x is public
  getchar();
  return 0;
}

2) 클래스/구조체에서 구조체를 파생할 때 기본 클래스/구조체에 대한 기본 액세스 지정자는 공개입니다.그리고 클래스를 파생할 때 기본 액세스 지정자는 비공개입니다.

예를 들어 프로그램 3은 컴파일에 실패하고 프로그램 4는 정상적으로 작동합니다.

// Program 3
#include <stdio.h>

class Base {
public:
    int x;
};

class Derived : Base { }; // is equilalent to class Derived : private Base {}

int main()
{
  Derived d;
  d.x = 20; // compiler error becuase inheritance is private
  getchar();
  return 0;
}
Run on IDE
// Program 4
#include <stdio.h>

class Base {
public:
    int x;
};

struct Derived : Base { }; // is equilalent to struct Derived : public Base {}

int main()
{
  Derived d;
  d.x = 20; // works fine becuase inheritance is public
  getchar();
  return 0;
}

유일한 차이점은 클래스와 구조체의 기본 상속이며, 당연히 각각 비공개 및 공개입니다.

사양에는 없습니다.가장 큰 차이점은 프로그래머가 2년 안에 코드를 읽을 때의 기대치입니다.구조체는 종종 POD로 간주됩니다.구조체는 객체 정의 이외의 목적으로 유형을 정의할 때 템플릿 메타프로그래밍에도 사용됩니다.

주목해야 할 또 다른 사항은 클래스를 사용하기 위한 구조체가 있는 레거시 앱을 업데이트한 경우 다음 문제가 발생할 수 있다는 것입니다.

이전 코드에는 구조체가 있으며 코드가 정리되어 클래스로 변경되었습니다.그런 다음 새로 업데이트된 클래스에 가상 함수 한두 개가 추가되었습니다.

가상 함수가 클래스에 있으면 컴파일러는 내부적으로 클래스 데이터에 추가 포인터를 추가하여 함수를 가리킵니다.

이것이 오래된 레거시 코드를 깨뜨리는 방법은 이전 코드 어딘가에서 구조체가 memfill을 사용하여 모두 0으로 지워지면 추가 포인터 데이터도 함께 지워지는 것입니다.

  1. 구조체의 멤버는 기본적으로 공개되고, 클래스의 멤버는 기본적으로 비공개입니다.
  2. 다른 구조 또는 클래스의 구조에 대한 기본 상속은 공개입니다. 다른 구조 또는 클래스의 클래스에 대한 기본 상속은 비공개입니다.
class A{    
public:    
    int i;      
};

class A2:A{    
};

struct A3:A{    
};


struct abc{    
    int i;
};

struct abc2:abc{    
};

class abc3:abc{
};


int _tmain(int argc, _TCHAR* argv[])
{    
    abc2 objabc;
    objabc.i = 10;

    A3 ob;
    ob.i = 10;

    //A2 obja; //privately inherited
    //obja.i = 10;

    //abc3 obss;
    //obss.i = 10;
}

이것은 VS2005에 있습니다.

또 다른 주요 차이점은 템플릿에 관한 것입니다.내가 아는 한, 템플릿을 정의할 때 클래스를 사용할 수 있지만 구조체는 사용할 수 없습니다.

template<class T> // OK
template<struct T> // ERROR, struct not allowed here
  1. 키워드로 정의된 클래스의 멤버 class ~이다 private 기본적으로.키워드로 정의된 클래스의 멤버 struct (또는 union) 이다 public 기본적으로.

  2. 기본 클래스에 대한 액세스 지정자가 없으면 public 때 가정된다. 파생된 클래스가 선언되었습니다 struct 그리고 private 클래스가 선언될 때 가정됩니다. class.

  3. 당신은 선언할 수 있습니다 enum class 하지만 아니 enum struct.

  4. 당신이 사용할 수있는 template<class T> 하지만 template<struct T>.

또한 C++ 표준에서는 유형을 다음과 같이 전방 선언할 수 있습니다. struct, 그런 다음 사용 class 유형을 선언할 때, 그 반대의 경우도 마찬가지입니다.또한, std::is_class<Y>::value ~이다 true Y가 struct 그리고 class, 하지만 false 대한 enum class.

다음은 좋은 설명입니다. http://carcino.gen.nz/tech/cpp/struct_vs_class.php

그럼 한 번 더:C++에서 구조체는 구조체의 멤버가 기본적으로 공개 가시성을 갖지만 클래스의 멤버는 기본적으로 개인 가시성을 갖는다는 점을 제외하면 클래스와 동일합니다.

그것은 단지 컨벤션일 뿐입니다.간단한 데이터를 보관하기 위해 구조체를 만들 수 있지만 나중에 멤버 함수와 생성자를 추가하여 시간을 발전시킬 수 있습니다.반면에 공개 이외의 것을 보는 것은 드문 경우입니다.구조체에 액세스합니다.

ISO IEC 14882-2003

9개 클래스

§3

구조는 다음으로 정의 된 클래스입니다 클래스 키 struct;회원 및 기본 클래스 (10 항)는 기본적으로 공개됩니다 (11 항).

다른 답변에서는 개인/공용 기본값을 언급했지만 구조체는 클래스이며 구조체입니다.이는 두 개의 다른 항목이 아니라 동일한 항목을 정의하는 두 가지 방법일 뿐입니다.

주목해야 할 흥미로운 점은(특히 질문자가 "관리되지 않는" C++를 언급했기 때문에 MSVC++를 사용할 가능성이 높기 때문에) 클래스가 다음과 같이 선언되면 Visual C++가 특정 상황에서 불평한다는 것입니다. class 그런 다음 다음으로 정의됩니다. struct (또는 그 반대일 수도 있음) 표준에 따르면 이는 완벽하게 합법적이라고 나와 있습니다.

  • .클래스에서는 기본적으로 모든 회원이 비공개이지만 구조에서는 기본적으로 공개됩니다.

    1. 구조체에는 생성자 및 소멸자와 같은 용어가 없지만 클래스 컴파일러의 경우 제공하지 않으면 기본값이 생성됩니다.

    2. 빈 클래스의 크기가 1바이트이므로 빈 구조의 크기는 0바이트입니다. 구조체 기본 액세스 유형은 공개입니다.구조물은 일반적으로 데이터 그룹화에 사용해야합니다.

    클래스 기본 액세스 유형은 비공개이며 상속의 기본 모드는 비공개입니다.클래스는 해당 데이터에서 작동하는 데이터 및 방법을 그룹화하는 데 사용해야합니다.

    요컨대,이 협약은 목적이 데이터를 그룹화하고 데이터 추상화가 필요할 때 클래스를 사용하는 경우 구조를 사용하는 것입니다.

    C ++ 구조 및 클래스는 명시 적으로 검색되지 않는 한 가치로 전달됩니다.다른 언어에서는 클래스와 구조에는 뚜렷한 의미론 (즉)이있을 수 있습니다.물체 (클래스 인스턴스)는 참조로 전달 될 수 있으며 구조는 가치에 따라 전달 될 수 있습니다.메모:이 질문과 관련된 의견이 있습니다.대화에 추가 할 토론 페이지를 참조하십시오.

다른 답변에서 암시하는 동안 명시적으로 언급되지 않았습니다. 사용법에 따라 구조체는 C와 호환됩니다.수업은 그렇지 않습니다.

이는 C와 호환되기를 원하는 헤더를 작성하는 경우 struct(C 세계에서는 함수를 가질 수 없음) 이외의 옵션이 없다는 것을 의미합니다.그러나 함수 포인터를 가질 수 있습니다).

차이점은 다음과 같습니다. class 그리고 struct 데이터 유형 간의 차이가 아니라 키워드 간의 차이입니다.이 두

struct foo : foo_base { int x;};
class bar : bar_base { int x; };

둘 다 클래스 유형을 정의합니다.이 컨텍스트에서 키워드의 차이점은 기본 액세스가 다르다는 것입니다.

  • foo::x 공개적이고 foo_base 공개적으로 상속됨
  • bar::x 비공개이며 bar_base 비공개로 상속됨

수업은 소프트웨어 엔지니어링의 맥락에서만 의미가 있습니다.데이터 구조와 알고리즘의 맥락에서 클래스와 구조체는 그다지 다르지 않습니다.클래스의 멤버를 참조해야 한다는 제한 규칙은 없습니다.

수업 없이 수많은 사람들이 대규모 프로젝트를 개발할 때, 모두가 원하는 기능과 데이터를 사용하기 때문에 결국 복잡한 결합 코드를 얻게 될 수 있습니다.클래스는 코드 분리 및 재사용을 향상시키기 위한 권한 제어 및 고유 기능을 제공합니다.

일부 소프트웨어 엔지니어링 원칙을 읽어보면 대부분의 표준은 수업 없이는 쉽게 구현할 수 없다는 것을 알게 될 것입니다.예를 들어:http://en.wikipedia.org/wiki/SOLID_%28객체 지향_디자인%29

그런데 구조체가 메모리 크런치를 할당하고 여러 변수를 포함하는 경우 값 유형 변수는 구조체가 할당된 위치에 값이 포함되어 있음을 나타냅니다.대조적으로, 참조 유형 변수의 값은 외부이며 구조체가 할당된 곳에 포함된 포인터에 의한 참조입니다.

구조체나 클래스를 언제 사용해야 하는지에 대한 지침으로 이것을 고려할 수 있습니다. https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx .

√ 유형의 인스턴스가 작고 일반적으로 수명이 짧거나 일반적으로 다른 물체에 포함 된 경우 클래스 대신 구조물 정의를 고려하십시오.

x 유형에 다음 특성이 모두없는 한 구조물 정의를 피하십시오.

원시 유형 (int, double 등)과 유사한 단일 값을 논리적으로 나타냅니다.

16 바이트 미만 인스턴스 크기가 있습니다.

그것은 불변이다.

자주 박스를 사용할 필요는 없습니다.

차이점은 다음과 같습니다. 구조체 그리고 수업 C++의 키워드는 특정 복합 데이터 유형에 특정 지정자가 없는 경우 기본적으로 구조체 또는 노동 조합 은 데이터 은폐만을 고려한 공개 키워드이고, 클래스는 프로그램 코드나 데이터 은닉만을 고려한 비공개 키워드입니다.항상 일부 프로그래머는 구조체 데이터 및 수업 코드를 위해.자세한 내용은 다른 출처에 문의하세요.

이러한 모든 요소 중에서 클래스 개념은 "구조"보다는 실제 개체를 나타내는 데 매우 적합하다는 결론을 내릴 수 있습니다. 주로 클래스에서 사용되는 OOP 개념은 실제 시나리오를 설명하는 데 매우 실용적이므로 현실과 병합하기가 더 쉽습니다. 예를 들어, 기본 상속은 구조체에 대해 공개이지만 이 규칙을 실제 세계에 적용하면 말도 안 됩니다. 그러나 클래스에서 기본 상속은 비공개이므로 더 현실적입니다.

어쨌든, 내가 정당화해야 할 것은 클래스가 훨씬 더 광범위하고 현실 세계에 적용 가능한 개념인 반면 구조는 내부 조직이 좋지 않은 원시 개념이라는 것입니다(구조체가 OOP 개념을 따르더라도 의미가 좋지 않습니다).

죄송합니다. 구조와 클래스 키워드의 주요 차이점은 구조에 공개 및 비공개 멤버 선언이 없으며 데이터 멤버 및 멤버 함수를 공개, 비공개 및 보호로 정의할 수 있다는 것입니다.

또 다른 차이점을 발견했습니다.클래스에 생성자를 정의하지 않으면 컴파일러가 생성자를 정의합니다.그러나 구조체에서 생성자를 정의하지 않으면 컴파일러도 생성자를 정의하지 않습니다.따라서 생성자가 실제로 필요하지 않은 경우에는 struct가 더 나은 선택입니다(성능 팁).그리고 내 나쁜 영어로 인해 죄송합니다.

클래스는 참조 유형이고 구조는 값 유형입니다.
클래스가 참조 유형이라고 말하면,
기본적으로 인스턴스 변수의 주소가 포함됩니다.

예를 들어:

Class MyClass
{
    Public Int DataMember;  //By default, accessibility of class data members 
                            //will be private. So I am making it as Public which 
                            //can be accessed outside of the class.
}

주요 메소드에서는
이 클래스에 메모리를 할당하는 new 연산자를 사용하여 이 클래스의 인스턴스를 만들 수 있습니다.
그리고 그 기본 주소를 MyClass 유형 변수(_myClassObject2)에 저장합니다.

Static Public void Main (string[] arg)
{
    MyClass _myClassObject1 = new MyClass();
    _myClassObject1.DataMember = 10;

    MyClass _myClassObject2 = _myClassObject1;
    _myClassObject2.DataMember=20;
}

위의 프로그램에서 myclass _myclassobject2 = _myclassobject1;명령어는 MyClass 유형의 두 변수가 모두 있음을 나타냅니다.

  1. myClassObject1
  2. myClassObject2

동일한 메모리 위치를 가리킬 것입니다.
기본적으로 동일한 메모리 위치를 동일한 유형의 다른 변수에 할당합니다.

따라서 MyClass 객체 유형 중 하나를 변경하면 다른 유형에도 영향을 미칩니다.
둘 다 동일한 메모리 위치를 가리키고 있기 때문입니다.

"_myclassobject1.datamember = 10;" 이 라인에서 객체의 데이터 구성원은 모두 값 10을 포함합니다.
"_myclassObject2.datamember = 20;" 이 라인에서 객체의 데이터 멤버는 모두 20의 값을 포함합니다.
결국, 우리는 포인터를 통해 객체의 데이터 멤버에 접근하고 있습니다.

클래스와 달리 구조체는 값 유형입니다.예를 들어:

Structure MyStructure
{
    Public Int DataMember;  //By default, accessibility of Structure data 
                            //members will be private. So I am making it as 
                            //Public which can be accessed out side of the structure.
}

Static Public void Main (string[] arg)
{
    MyStructure _myStructObject1 = new MyStructure();
    _myStructObject1.DataMember = 10;

    MyStructure _myStructObject2 = _myStructObject1;
    _myStructObject2.DataMember = 20;
}

위 프로그램에서,
new 연산자를 사용하여 MyStructure 유형의 객체를 인스턴스화하고
MyStructure 유형의 _myStructObject 변수에 주소를 저장하고
"_myStructObject1.DataMember = 10"을 사용하여 구조의 데이터 멤버에 값 10을 할당합니다.

다음 줄에서는
MyStructure 유형의 다른 변수 _myStructObject2를 선언하고 여기에 _myStructObject1을 할당합니다.
여기서 .NET C# 컴파일러는 _myStructureObject1 개체의 또 다른 복사본을 생성하고
해당 메모리 위치를 MyStructure 변수 _myStructObject2에 할당합니다.

따라서 _myStructObject1에 대한 모든 변경 사항은 MyStructrue 유형의 다른 변수 _myStructObject2에 영향을 미치지 않습니다.
이것이 바로 우리가 구조를 값 유형이라고 말하는 이유입니다.

따라서 클래스의 즉시 기본 클래스는 Object이고 구조의 즉시 기본 클래스는 Object에서 상속되는 ValueType입니다.
클래스는 상속을 지원하지만 구조는 지원하지 않습니다.

우리는 그것을 어떻게 말합니까?
그리고 그 이유는 무엇입니까?
대답은 수업입니다.

추상, 봉인, 정적, 부분적일 수 있으며 비공개, 보호 및 내부 보호가 불가능합니다.

구조체와 클래스의 주요 차이점은 구조체에서는 서로 다른 데이터 유형의 데이터 변수만 선언할 수 있는 반면 클래스에서는 데이터 변수, 멤버 함수를 선언할 수 있으므로 함수를 통해 데이터 변수를 조작할 수 있다는 것입니다.

-> 클래스 대 구조체에서 찾은 또 다른 편리한 점은 프로그램에서 파일을 구현하는 동안 새로운 작업 집합마다 구조체의 일부 작업을 반복해서 수행하려면 별도의 함수를 만들어야 하며 다음을 수행해야 한다는 것입니다. 파일에서 읽은 후 구조체의 개체를 전달하여 해당 개체에 대한 작업을 수행합니다.수업 중에 매번 필요한 데이터에 대해 일부 작업을 수행하는 함수를 만드는 경우.. 파일에서 개체를 읽고 함수를 호출하기만 하면 됩니다.

그러나 그것은 프로그래머가 어떤 방식으로 적합하다고 생각하느냐에 달려 있습니다. 나에 따르면 나는 OOP를 지원하기 때문에 매번 수업을 선호하고 그것이 거의 모든 언어로 구현되는 이유이며 모든 시간 프로그래밍의 놀라운 기능입니다 ;- )

그리고 제가 언급하는 것을 잊은 가장 잊혀지지 않는 차이점은 클래스가 데이터 숨기기를 지원하고 구조체가 지원하지 않는 동안 내장된 데이터 유형에 대해 수행되는 작업도 지원한다는 것입니다!

**업데이트:** 이 답변은 무시해 주시기 바랍니다.구조체의 경우 값이 초기화되지 않았지만 우연히 0이 되었을 가능성은 고려하지 않았습니다.구조체와 클래스 사이에는 초기화 차이가 없습니다.


기본 초기화와 관련하여 구조체와 클래스 사이에 또 ​​다른 차이점이 있습니다.

struct Foo {
    int a;
};

class Bar {
    int a;
};

class Tester {
    Foo m_Foo = Foo();
    Bar m_Bar = Bar();

public:
    Tester() {}
};

int main() {
    auto myTester = Tester();
}

해당 코드를 실행하고 myTester를 검사합니다.m_Foo의 경우 구조체 m_Foo.a가 0으로 초기화되었지만 m_Bar의 경우 m_Bar.a 클래스가 초기화되지 않은 것을 볼 수 있습니다.따라서 기본 생성자가 구조체와 구조체에 대해 수행하는 작업에는 차이가 있는 것으로 보입니다.수업.Visual Studio에서 이것을 보고 있습니다.

구조와 클래스에는 3가지 기본적인 차이점이 있습니다.

첫 번째 메모리는 스택 메모리의 구조용으로 예약되어 있습니다(프로그래밍 언어에 가깝습니다). 스택 메모리의 클래스용으로만 굴절용으로 예약되어 있고 실제 메모리는 힙 메모리에 예약되어 있습니다.

2Nd - 기본적으로 구조는 클래스가 비공개로 처리되는지 여부를 공개로 처리합니다.

3Rd- 구조에서는 코드를 재사용할 수 없지만 클래스에서는 상속이라고 불리는 동일한 코드를 여러 번 재사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top