** 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
https://boycoding.tistory.com/220
** 이름공간(namespace)
: 이름을 붙여놓은 공간, 특정 영역에 이름을 붙여주기 위한 문법적 요소
① 중첩도 가능
② using을 이용한 이름공간 명시
③ 이름공간의 별칭 지정 가능
** :: 범위지정 연산자(Scope Resolution Operator)
1) 이름 공간을 지정할 때 사용하는 연산자
2) 전역변수와 지역변수가 이름이 같은 경우,
전역변수는 지역변수에 의해 가려진다는 특징이 있는데 이때 사용하면 전역변수 사용 가능
https://www.tcpschool.com/cpp/cpp_scope_namespace
** 새로운 자료형 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
** 주소값을 이용한 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++ 프로그래밍 도서를 읽고 정리한 글입니다.
'IT공부 > IT서적' 카테고리의 다른 글
[윤성우 열혈 C++프로그래밍] Part3. 객체지향의 전개 (0) | 2024.09.14 |
---|---|
[윤성우 열혈 C++프로그래밍] Part2. 객체지향의 도입 (0) | 2024.08.15 |
[윤성우 열혈 C프로그래밍] Part4. C언어의 깊은 이해 (0) | 2024.07.28 |
[윤성우 열혈 C프로그래밍] Part3. 포인터와 배열의 완성 (0) | 2024.07.24 |
[윤성우 열혈 C프로그래밍] Part2. 포인터 배열의 시작 (0) | 2024.07.19 |