[OODP] 2. Compound Types(2)

POSTECH OODP Lecture at 24SS

Compound Types

  • Built on basic types.
  • Arrays, strings, pointers, structures

Structures

Allow developer to store all the related information of different user-definable types in a single place

// structure declaration
struct inflatable
{
    char name[20];
    float volume;
    double price;
};

struct inflatable goose;    // keyword struct required in C
inflatable vincent;         // keyword struct not required in C++

struct numbers
{
    float v1;
    double v2;
} a, b;         // can directly declare variables here, too

struct
{
    string name;
    int age;
} ds, jy;       // also can omit type name

Structure의 각 member들은 membership operator(.)를 통해 접근 가능하다. Structure의 초기화는 assignment operator(=)를 사용해 이루어진다. Structure의 배열을 생성하는 것도 가능하다.

다양한 예제를 확인하고 싶다면 structure.cpp를 참고하라.

Enumberations

An alternative to const for creating symbolic constants. Also lets you define new types but in a fairly restricted fashion

// Syntax:
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};

spectrum band;
band = blue;    // valid
band = 2000;    // invalid, 2000 not an enumerator
band++;         // invalid
band = orange + red;    // invalid
band = 2;       // how about this?

열거형은 enumeration이라는 새로운 type을 만들어준다. 예를 들어, spectrum에 0-7의 symbolic constant integer가 할당된다. 순서대로 정수가 할당되는 것이 아니라 ‘=’를 활용해 원하는 정수를 명시적으로 할당할 수 있다.

enum bits { one = 1, two = 2, four = 4, eight = 8};
int v = two;        // two converted to integer 2
cout << v << endl;  // 2

enum과 관련된 더 예제가 enum.cpp에 준비되어 있다.

Questions?

Q1. Array는 assignment operator(=)를 사용해서 복사할 수 없지만, Structure는 ‘=’를 사용해서 복사할 수 있다. 그렇다면 Structure 안에 있는 Array도 ‘=’를 사용해서 그 Structure를 복사할 때 복사가 될까? A1. Yes. 어떤 operation을 통해 되는지 구현해보고 싶네.

Q2. 왜 Array는 Structure과 달리 assignment operator(=)를 사용할 수 없게 설계되었을까? 어떤 사상에 의해서일까? A2.

Q3. Enumerator에 일부만 정수를 할당한다면 나머지는 어떻게 할당될까? 만약 앞에서 자동으로 할당된 정수와 중복되는 값을 나중에 할당한다면 어떻게 될까? A3.