[C++] 01. C언어 기반의 C++ (1)

Serin Yoon·2021년 11월 5일
0

Graphics/C++

목록 보기
1/5
post-thumbnail

강의 <윤성우의 열혈 C++ 프로그래밍>을 참고하여 정리한 글입니다. 🙂
https://github.com/Serin-Yoon/cpp-study/blob/master/cpp%20study/chapter1.cpp

1. 기본 구성

  • 헤더 파일 선언 #include <iostream>
  • 출력 std::cout << '출력대상' << '출력대상' << '출력대상'
  • 개행 std::endl
  • 입력 std::cin >> '변수'
#include <iostream>
int main(void) {
    char name[100]; // 함수 중간 부분에서도 변수 선언 가능
    std::cout << "Name: ";
    std::cin >> name;
    std::cout << "Welcome " << name << std::endl;
    return 0;
}

2. 함수 오버로딩

#include <iostream>

int func(int a) { return a; }
int func(int a, int b) { return a + b; }
int main(void) {
    std::cout << func(10) << func(10, 20) << std::endl;
    return 0;
}

C++는 함수 호출 시 함수 이름인자 정보를 참조하여 호출할 함수 결정.
따라서 매개변수의 선언이 다르다면 동일한 이름의 함수를 정의할 수 있음.
이를 함수 오버로딩(Function Overloading) 이라 함.

/* 오버로딩 성립 예시 */
int func1(int a) { ... }
int func1(char b) { ... }

int func2(int a) { ... }
int func2(int a, int b) { ... }

/* 오버로딩 성립X 예시 */
void func3(int a) { ... }
int func3(int a) { ... }

3. 매개변수 디폴트 값

#include <iostream>
int func(int a = 10) { return a + 1; }
int main(void) {
    func(); // 11
    func(20); // 21
    return 0;
}
#include <iostream>
int func(int a = 10, int b = 20);
int main(void) {
    func(5, 10);
    return 0;
}

함수 선언을 별도로 할 때에는 함수 선언부에만 디폴트값 지정해야 함.
컴파일러가 함수의 디폴트값의 지정 여부를 알아야 함수 호출 문장을 적절히 컴파일 할 수 있기 때문.

/* 부분적 디폴트값 설정 성립 예시 */
int func(int a, int b, int c = 30);
int func(int a, int b = 20, int c = 30);
int func(int a = 10, int b = 20, int c = 30);

/* 부분적 디폴트값 설정 성립X 예시 */
int func(int a = 10, int b, int c);

매개변수 일부에만 디폴트값 지정하려면 오른쪽부터 지정해야 함.
인자는 왼쪽부터 채워지기 때문.

4. 매크로 함수 & 인라인 함수

/* 매크로 함수 예시 */
#include <iostream>
#define SQUARE(x) ((x)*(x))

int main(void) {
    std::cout << SQUARE(5) << std::endl; // 25
    return 0;
}
  • 장점: 함수가 인라인화 되어 성능 향상
  • 단점: 함수의 정의 방식이 일반함수에 비해 복잡 (복잡한 함수 정의에는 한계)
/* 인라인 함수 예시 */
#include <iostream>

inline int SQUARE(int x) return x*x;

int main(void) {
    std::cout << SQUARE(5) << std::endl; // 25
    return 0;
}

인라인 선언은 컴파일러에서 처리됨. 따라서 컴파일러가 함수의 인라인화를 결정.
매크로 함수와 달리 자료형에 독립적이지 않음.

5. 이름공간

/* 이름공간 사용 예시 */
#include <iostream>

namespace Space1 {
    void func(void) {
        std::cout << "Space1" << std::endl;
    }
}

namespace Space2 {
    void func(void) {
        std::cout << "Space2" << std::endl;
    }
}

namespace Space3 {
    void func(void);
}

int main(void) {
    Space1::func();
    Space2::func();
    Space3::func();
    return 0;
}

void Space3::func(void) {
    std::cout << "Space3" << std::endl;
}

선언만 먼저 해놓을 수 있다.

/* using 사용 예시 */
#include <iostream>
using std::cout;
using std::endl;

int main(void) {
    cout << "Hello World!" << endl;
}

/* using 사용 예시 2 */
#include <iostream>
using namespace std;

int main(void) {
    cout << "Hello World!" << endl;
}

/* 지역변수, 전역변수 예시 */
#include <iostream>
int val = 100;
int func(void) {
    int val = 50;
    std::cout << val << std::endl; // 50
    std::cout << ::val << std::endl; // 100;
}

그래픽스를 공부하기에 앞서 C++부터 공부하는 게 좋을 것 같아서 강의를 듣기 시작했다.
11월 중순까지 강의를 다 듣는 걸 목표로! 🔥

profile
티스토리로 이사했습니다 🏠

0개의 댓글