본 게시물은 개인 공부용 포스트 입니다.
1. 흐름제어
기본적인 흐름제어 구조
- 순차 구조 : 문장이 나열된 순서에 따라 차례로 실행하는 구조
- 조건제어 구조 : 지정된 조건에 따라 실행 흐름을 제어하는 구조 (if문, switch문)
- 반봅제어 구조 : 정해진 범위의 문장을 반복적으로 실행하게 하는 구조 (for문, while문, do ... while문)
if문
//사용 형식
if(조건)
문장1; // 참일때 실행할 문장
else
문장2; // 거짓일 때 실행할 문장
//예
int a = 10;
int b = 20;
if(a < b)
cout << b << endl;
else
cout << a << endl;
switch문
//switch문 사용형식
switch(정수형_수식){
case 값1: 문장1;
break;
case 값2: 문장2;
break;
...
default: 문장n;
}
//switch문 예
switch(score / 10){
case 10:
case 9: grade = 'A';
break;
case 8: greade = 'B';
break;
case 7: grade = 'C';
break;
case 6: grade = 'D';
break;
default: grade = 'F';
}
for문
//for문 사용 형식
for(초기화문장; 반복조건; 증감문장)
반복할 문장;
//for문 예
int val, total = 0;
for(int i=0; i<10; i++){
cin >> val;
total += val;
}
while문
//while문 사용형식
while(반복 조건)
반복할 문장;
//예 (for 루프)
int val, total = 0;
for(int i=0; i<10; i++{
cin >> val;
tatal += val;
}
//예 (위의 for 루프와 똑같은 while 루프)
int val, total = 0;
{
int i=0;
while(i < 10){
cin >> val;
total += val;
i++;
}
}
do...while문
//do...while문 사용형식
do
반복할 문장;
while(반복조건);
2. 구조체와 클래스
구조체란?
여러 가지 자료형의 데이터 집합을 저장할 수 있는 새로운 자료형을 정의한
구조체 선언
//구조체 선언 형식
struct StructName{
Type1 item1;
Type2 item2;
...
};
//예
struct CrcleType{
C2dType center;
double radius;
};
//구조체 데이터 처리하는 함수
double circleArea(CircleType c){
return c.radius * c.radius * PI;
}
int main(){
CircleType c1 = {{0, 0}, 10};
cout << "원의 면적 : "
<< circleArea(c1) << endl;
}
클래스란?
표현하고자 하는 대상(객체)의 데이터(속성)와 함께 그 대상이 할 수 있는 동작을 나타내는 함수(행위)들을 묶어서 선언한 것
예를 들어,
'원' 클래스가 존재.
행위 | init : 원의 초기화 |
area : 원의 면적을 계싼 | |
chkOverlap : 다른 원과 중첩 여부 검사 | |
display : 원의 정보 디스플레이 | |
속성 | center : 중심 좌표 |
radius : 반경 |
class CircleClass{
C2dType center;
double radius;
public:
void init(double cs, double cy, double r){ ... }
double area() const{ ... }
bool chkOverlap(const CircleClass& c) const{ ... }
void display() const{ ... }
};
3. 배열
배열이란?
동일한 자료형의 값을 여러 개 저장할 수 있는 연속적으로 할당된 공간을 묶어 하나의 이름을 갖는 변수로 만드는 것.
- 각각의 원소는 0번부터 시작하여 차례로 부여된 번호(인덱스)를 이용하여 액세스 함
배열 선언
// 1차원 배열 예
float fArray[4];
int i=0;
fArray[i] = 10.0f;
cin >> fArray[1] >> fArray[2] >> fArray[3];
cout << fArray[1] * fArray[2];
// 2차원 배열 예
int Arr2D[4][3];
배열 초기화
//초기화 예
int a[5] = {1, 2, 3, 4, 5}; // '='는 생랼 가능
int b[5] = {1, 2, 3}; // b[3]와 b[4]는 0으로 자동 초기화됨
int c[] = {1, 2, 3, 4, 5}; // 배열의 크기는 5
int d[2][3] = {1, 2, 3}, {4, 5, 6}; //2차원 배열의 초기화
4. 포인터와 동적 메모리 할당
포인터란?
어떠한 대상이 위치한 곳을 가리키는(주소를 저장하는) 변수.
포인터 선언 형식
TypeName* ptrVar;
//TypeName : 가리킬 값의 자료형
//ptrVar : 포인터 변수의 이름
포인터가 유효한 대상을 가리키게 한 후 사용한다.
ptrVar = &var; // ptrVar이 var을 가리키게 함
*ptrVar = value; // ptrVar을 사용하여 var을 액세스
& : 주소 계산 연산자
*ptrVar : 포인터 ptrVar가 가리키는 곳
포인터 사용 예
#include <iostream>
using namespace std;
int main(){
int a = 10;
int* ptr;
ptr = &a;
cout << "ptr이 가리키는 값 : " << *ptr << endl; //a의 값인 10이 출력됨
*ptr = 20;
cout << "변수 a의 값 : " << a << endl; //a의 값이 20으로 변경되어 출력됨
return 0;
}
동적 메모리 할당이란?
프로그램 동작 중에 기억공간의 필요성 및 소요량을 결정하여 필요한 공간을 할당하는 것
- 기억 공간의 생성 시점 : new 연산자의 실행 시점
- 기억 공간의 소멸 시점 : delete 연산자의 실행 시점
포인터 변수가 할당된 기억 공간을 가리키게 한다.
//메모리 할당 연산자
ptrVar = new TypeName;
ptrVar = new TypeName[n];
//메모리 반납 연산자
delete ptrVar;
delete[] ptrVar
5. 참조
참조란?
어떠한 대상을 가리키는 값 (포인터와 유사)
참조 변수는 참조 대상의 별병처럼 사용하는 것.
l-value 참조 : 실체가 있는 대상(l-value)에 대한 참
(l-value는 대입 명령에 왼쪽에 있는 것)
(r-value는 대입 명령에 오른쪽에 있는 것)
l-value 참조 변수의 선언 형식
TypeName& refVar = varName;
//TypeName : 참조 대상의 자료형
//refVar : 참조 변수의 이름
//varName : 참조 대상
참조 변수 사용 예
int a = 10, b = 20;
int& aRef = a; //aRef가 a를 참조하게 만듦
cout << aRef << endl; // 10이 출력됨
aRef = 100; // a의 값이 100으로 바뀜
aRef = b; // a의 값이 200으로 바뀜
//위의 참조 예제를 포인터로 바꿨을 때
int a = 10, b = 20;
int* aPtr = &a;
cout << *aPtr << endl;
*aPtr = 100;
*aPtr = b;
const 참조 - 참조 변수가 참조하는 대상의 값을 바꿀 수 없다. (참조만 가능)
const 참조 예)
int x{ 10 };
const int& xRef = x;
cout << xRef << endl; //x의 값인 10이 출력됨
xRef += 10; //오류
참조가 포인터와 다른
- 참조 변수를 이용하여 값을 읽거나 저장할 때 참조 대상 변수를 사용하는 형식과 동일
- 참조 변수는 초기화를 통해 반드시 어떤 대상을 참조해야 함
- 참조 변수는 초기화를 통해 지정된 참조 대상을 바꿀 수 없어 참조의 유효기간 동안 하나의 대상만 참조할 수 있음
r-value 참조란?
사용한 후에는 그 값을 더이상 가지고 있을 필요가 없는 대상을 참조 (없어질 값)
객체의 값을 다른 객체로 이동해서 사용하고자 함
[참고 자료]
C++ 프로그래밍 방송통신대학교
'IT > 개발공부' 카테고리의 다른 글
C++ 함수 (함수 정의, 호출, 인수 전달, inline 함수) (0) | 2023.06.20 |
---|---|
Spring 처음부터 공부해보기 - 1 (프로젝트 생성, Bean, 어노테이션, Spring Container, Loose Coupling) (0) | 2023.06.15 |
C++ 언어 기초(1) (키워드, 식별자, 자료형, 상수, 변수, 연산자) (0) | 2023.06.14 |
C++ 언어의 개요 (처음 C++ 배우기!) (0) | 2023.06.13 |
java stream에 대해 알아보자 (0) | 2023.06.12 |