IT공부/IT서적

[윤성우 열혈 C++프로그래밍] Part1. c++로의 전환

shine94 2024. 8. 8. 22:58

** C++ 에서 입력과 출력

#include <iostream>

int main() 
{
    char name[100];
    char lang[200];

    std::cout<<"What is your name? ";
    std::cin>>name;

    std::cout<<"What is your favorite language? ";
    std::cin>>lang;

    std::cout<<"My name is "<<name<<".\n";
    std::cout<<"My favorite language is "<<lang<<".\n";
    return 0;
}

 

** 함수 오버로딩(Function Overloading)

 : 전달되는 인자를 통해서 호출하고자 하는 함수의 구분

   ① 매개변수의 자료형 또는 개수가 다름

   ② 반환형이 달라도 호출되는 함수의 기준이 될 수 없으므로 불가능

 

int SUM(int num1, int num2)
{
    return num1 + num2;
}

int SUM(double num1, double num2)
{
    return num1 + num2;
}

int SUM(int num1, int num2, int num3)
{
    return num1 + num2 + num3;
}

int SUM(int num1, int num2, int num3, int num4)
{
    return num1 + num2 + num3 + num4;
}

 

** 매개변수의 디폴트 값(Default Value)

1) 디폴트 값은 함수의 선언 부분에만 표현하면 됨

2) 전부 디폴트 값을 설정해도 되지만, 부분적으로 설정해도 됨

 

#include <iostream>

int BoxVolume(int length, int width = 1, int height = 1);

int main()
{
    std::cout<<"[3, 3, 3] : "<<BoxVolume(3, 3, 3)<<std::endl;
    std::cout<<"[5, 5, 5] : "<<BoxVolume(5, 5, 5)<<std::endl;
}

int BoxVolume(const int length, const int width, const int height)
{
    return length * width * height;
}

 

** 인라인(inline) 함수

 : 호출될 때, 일반적인 함수의 호출 과정을 거치지 않고, 함수의 모든 코드를 호출된 자리에 바로 삽입하는 방식의 함수

 

   ☞ 매크로 함수는 일반적인 함수에 비해 속도 빠르나 정의하기가 어려움

       ㄴ 정의하기 편하게 일반 함수처럼 가능했으면 좋겠다

             → 인라인 함수

 

   ☞ 매크로 함수와는 달리 인라인은 자료형에 의존

       ㄴ 그럼 함수 오버로딩 이용하면 되잖아?!

            → 매크로 함수의 장점이 사라짐

            → 자료형에 의존적이지 않게 템플릿 사용 하면 됨!!

 

#include <iostream>

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

int main() 
{
    std::cout<<SQUARE(5)<<std::endl;
    std::cout<<SQUARE(12)<<std::endl;
}

 

#include <iostream>

template <typename T>
inline T SQUARE(T x)
{
    return x * x;
}

int main()
{
    std::cout<<SQUARE(5)<<std::endl;
    std::cout<<SQUARE(5.5)<<std::endl;
}

 

   https://www.tcpschool.com/cpp/cpp_cppFunction_inlineFunction#google_vignette

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

    https://boycoding.tistory.com/220

 

C++ 08.06 - 인라인 함수 (inline function)

인라인 함수 (inline function) 함수를 사용하면 다음과 같은 많은 이점을 얻을 수 있다. 함수 내부의 코드를 재사용할 수 있다. 인스턴트 코드보다 함수에서 코드를 변경하거나 업데이트하기가 더

boycoding.tistory.com

 

** 이름공간(namespace)

 : 이름을 붙여놓은 공간, 특정 영역에 이름을 붙여주기 위한 문법적 요소

   ① 중첩도 가능

   ② using을 이용한 이름공간 명시

   ③ 이름공간의 별칭 지정 가능

 

** :: 범위지정 연산자(Scope Resolution Operator)

1) 이름 공간을 지정할 때 사용하는 연산자

2) 전역변수와 지역변수가 이름이 같은 경우,

   전역변수는 지역변수에 의해 가려진다는 특징이 있는데 이때 사용하면 전역변수 사용 가능

 

   https://www.tcpschool.com/cpp/cpp_scope_namespace

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

** 새로운 자료형 bool : true 참, false 거짓

 

** 참조자(Reference)

 : 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름

   즉, 변수에 별명(=별칭)을 하나 붙여주는 것

 

   ☞ 참조자의 수에는 제한이 없으며, 참조자를 대상으로도 참조자를 선언할 수 있다

int num1 = 2759;
int &num2 = num1;
int &num3 = num2;
int &num4 = num3;

 

** 참조자의 선언 가능 범위

1) 변수에 대해서만 선언 가능하고, 선언과 동시에 누군가를 반드시 참조해야 함

2) 상수를 대상으로 참조 불가능

3) 이미 선언한 참조자는 변경 불가능

4) NULL로 초기화 불가능

 

   https://modoocode.com/141#google_vignette

 

씹어먹는 C++ - <2. C++ 참조자(레퍼런스)의 도입>

모두의 코드 씹어먹는 C++ - <2. C++ 참조자(레퍼런스)의 도입> 작성일 : 2012-01-01 이 글은 130488 번 읽혔습니다. 안녕하세요 여러분! 오랜만에 찾아온 Psi 입니다. 사실 이전 강좌에서 부터 강조해왔지

modoocode.com

 

** 주소값을 이용한 Call-by-reference, 참조자를 이용한 Call-by-reference

#include <iostream>

using namespace std;

void SwapByRef2(int& ref1, int& ref2)
{
    int temp = ref1;
    ref1 = ref2;
    ref2 = temp;
}

int main()
{
    int val1 = 10;
    int val2 = 20;

    SwapByRef2(val1, val2);
    cout<<"val1 : "<<val1<<endl;
    cout<<"val2 : "<<val2<<endl;
    return 0;
}

 

** 반환형이 참조형 (Reference Type)인 경우

   int num2 = RefRetFuncOne(num);    // 가능

   int &num2 = RefRetFuncOne(num);  // 가능

#include <iostream>
using namespace std;

int& RefRetFuncOne(int& ref)
{
	ref++;
	return ref;
}

int main()
{
    int num1 = 1;
    int num2 = RefRetFuncOne(num1);
    int& num3 = RefRetFuncOne(num1);

    cout<<"num1 : "<<num1<<endl;
    cout<<"num2 : "<<num2<<endl;
    cout<<"num3 : "<<num3<<endl;
    cout<<endl;

    num1 += 1;
    num2 += 100;
    num3 += 1000;
    
    cout<<"num1 : "<<num1<<endl;
    cout<<"num2 : "<<num2<<endl;
    cout<<"num3 : "<<num3<<endl;
    return 0;
}

 

[주의!] 잘못된 참조의 반환하지 않도록 조심!!

int& RetuRefFunc(int n)
{
    int num = 20;
    num += n;
    return num;
}

 

** const 참조자

   (예) 리터럴 상수

int Adder(const int &num1, const int &num2)
{
    return mum1 + num2;
}
cout<<Adder(3, 4)<<endl;

 

** new & delete

1) malloc과 free를 대신 → 힙

#include <iostream>

using namespace std;

int main()
{
    int* numbers = new int[10];

    for (int i = 0; i < 10; i++)
    {
        numbers[i] = i;
        cout<<i<<":"<<numbers[i]<<endl;
    }
	
    return 0;
}

 

2) 객체의 생성 → 힙

#include <iostream>

using namespace std;

class Simple
{
public:
	Simple()
	{
		cout << "I'm simple constructor!" << endl;
	}
};

int main()
{
	Simple* sp1 = new Simple;
	
	return 0;
}

 

** c언어의 표준함수 호출

 : c를 더하고 .h를 빼라

   (예) #include <stdio.h> → #include<cstdio>

 

** C++의 헤더를 선언해야 하는 이유?

 : C++ 관점에서, 하위 버전과의 호환성을 제공하기 위함

 

 

** 해당 글은 윤성우의 열혈 C++ 프로그래밍 도서를 읽고 정리한 글입니다.

   https://product.kyobobook.co.kr/detail/S000001589147

 

윤성우의 열혈 C++ 프로그래밍 | 윤성우 - 교보문고

윤성우의 열혈 C++ 프로그래밍 | 『C++ 프로그래밍』은 C언어를 이해하고 있다는 가정하에서 집필된 C++ 기본서로서, 초보자에게 적절한 설명과 예제를 통해서 C++ 프로그래밍에 대해 설명한다. 더

product.kyobobook.co.kr