Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • hdfs
  • CS
  • C++
  • algorithm
  • kafka
  • 정렬
  • NiFi
  • metastore
  • 알고리즘
  • 프로그래밍
  • java
  • Coding
  • BigData
  • 빅데이터
  • Hive
  • 코딩
  • docker
  • hadoop
  • sort
  • spark

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

[C++] 구조체 생성자 오버로딩 Struct Constructor Overloading
Computer Science/C++

[C++] 구조체 생성자 오버로딩 Struct Constructor Overloading

2021. 1. 10. 16:45

구조체 생성자란?

 구조체를 생성과 동시에 내부 변수들의 값을 초기화 시키는 함수.

 


 

 C++에는 구조체와 비슷한 클래스가 존재하기 때문에 OOP(Object Oriented Programming)를 위해선 보통 클래스를 사용합니다. 하지만 프로젝트가 아닌 일반적인 알고리즘 문제를 풀 때는 구조체를 많이 사용하는데, 이를 위한 기능들을 소개해드리겠습니다.

 

 일반적인 생성자를 따로 선언하지 않는 경우에는 아래와 같이 사용합니다. 하지만 알고리즘 문제를 풀다보면 vector, queue, stack 등 여러가지 자료구조에 구조체 템플릿을 선언해야할 때가 있습니다. 위와 같은 방법을 사용하게 되면 구조체 임시 변수를 하나 선언해놓고 값을 넣은 후, 자료구조에 다시 넣어줘야하는 번거러운 작업이 필요합니다.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

typedef struct S{
    int x, y, z;
};

int main()
{
    vector<S> v;
    
    // **** Example 1 ****
    // 구조체 객체 생성
    S struct_var;
    
    // 구조체 변수 값 대입
    struct_var.x = 1;
    struct_var.y = 3;
    struct_var.z = 5;

    // vector에 push
    v.push_back(struct_var);
    
    
    // **** Example 2 ****
    // 구조체 객체 생성 및 변수 값 대입
    S struct_var2 = {10, 30, 50};
    
    // vector에 push
    v.push_back(struct_var2);
    
    
    cout << "v[0] : " <<  v[0].x << " " << v[0].y << " " << v[0].z << endl;
    cout << "v[1] : " <<  v[1].x << " " << v[1].y << " " << v[1].z << endl;
    // v[0] : 1 3 5
    // v[1] : 10 30 50
}

 

 이와 같은 번거러운 작업은 아래처럼 구조체 생성자를 선언해서 해결할 수 있습니다. 아래의 예시를 보면 위의 예시와 같은 작업이지만 코드 길이가 확연하게 줄어든 것을 확인할 수 있습니다.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

typedef struct S{
    int x, y, z;
    S(int X, int Y, int Z) : x(X), y(Y), z(Z) {}
};

int main()
{
    vector<S> v;
    
    // 구조체 값 대입 및 vector에 push
    v.push_back(S(1,3,5));
    v.push_back(S(10,30,50));
    
    cout << "v[0] : " <<  v[0].x << " " << v[0].y << " " << v[0].z << endl;
    cout << "v[1] : " <<  v[1].x << " " << v[1].y << " " << v[1].z << endl;
    // v[0] : 1 3 5
    // v[1] : 10 30 50
}

 

 구조체 생성자 또한 다른 함수들과 같이 오버로딩 적용이 가능합니다.  상황에 따라 구조체 초기화를 다르게 하고싶을 때는 아래와 같이 원하는 생성자를 이용할 수 있습니다.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

typedef struct S{
    int x, y, z;
    
    // Overloadinng
    S() { x = 100; y = 300; z = 500; }
    S(int X, int Y, int Z) : x(X), y(Y), z(Z) {}
};

int main()
{
    vector<S> v;
    
    v.push_back(S(1,3,5));
    v.push_back(S(10,30,50));
    v.push_back(S());
    
    cout << "v[0] : " << v[0].x << " " << v[0].y << " " << v[0].z << endl;
    cout << "v[1] : " << v[1].x << " " << v[1].y << " " << v[1].z << endl;
    cout << "v[2] : " << v[2].x << " " << v[2].y << " " << v[2].z << endl;
    // v[0] : 1 3 5
    // v[1] : 10 30 50
    // v[2] : 100 300 500
}

 

저작자표시 비영리 (새창열림)

'Computer Science > C++' 카테고리의 다른 글

[C++] Split #2 - multiple delimiter split 함수 구현  (0) 2021.02.02
[C++] Split #1 - String delimiter split 함수 구현  (0) 2021.01.28
[C++] 2차원 배열 행렬 바꾸기  (0) 2021.01.25
[C++] 2차원 배열 90도 회전  (2) 2021.01.23
[C++] 2차원 배열 특정 값 초기화  (0) 2021.01.17
    'Computer Science/C++' 카테고리의 다른 글
    • [C++] Split #1 - String delimiter split 함수 구현
    • [C++] 2차원 배열 행렬 바꾸기
    • [C++] 2차원 배열 90도 회전
    • [C++] 2차원 배열 특정 값 초기화
    Taaewoo
    Taaewoo

    티스토리툴바