관리 메뉴

개발벤제마

C++개인적으로 2학기 기말고사 직전 최종 정리(줄글로 쓸 예정임.) 본문

2024.2학기

C++개인적으로 2학기 기말고사 직전 최종 정리(줄글로 쓸 예정임.)

개벤 2024. 10. 20. 00:11

일단, 자료형부터 알아보면 자료형은 다른 말로 리터럴이라고도 하는데 리터럴에는 실수형 정수형 문자열 문자형 등이 있다. 실수형은 float형, 정수형은 int, 문자열은 string형, 문자형은 char형이라고 한다. 전처리기는 컴파일하기 이전에 처리되는 것으로 #include, #define과 같은 것들을 의미한다. 여기서 #include는 표준 라이브러리 함수를 포함하는 헤더 파일들을 프로그램에 포함시키기 위한 전처리기이며 #define은 매크로 함수를 프로그램에 포함시키기 위한 전처리기이다. 다음으로 연산자가 있는데, C언어와 C++언어의 연산자는 거의 같다(사실, 모든 프로그래밍 언어의 연산자와 그 우선순위는 사실상 동일하다고 봐도 무방하다.) 다음으로 제어문에 대해 알아보면 for문, while문, do~while문, switch~case문, if문, if~else문이 있다. 하나씩 살펴보자. 우선, for문과 while문은 거의 같은 구문이다. for문과 while문의 차이점을 알아보자면 우선 for문 같은 경우는 초기화, 조건, 증/감을 한 줄에 명시하지만 while문은 조건, 초기화, 증감이 별도로 처리된다. 몇 가지 예제를 써보면 for문의 경우 다음과 같다.(필자가 사용하는 모든 예제는 C언어를 기본으로 한다.) (에 땀이 나네요...ㅠㅠ)

#include <stdio.h>

int main()

{

    int i;

    for(i=0;i <1000;i++)

          {

               printf("개발벤제마")

          }

         return 0;

}

이 예제를 실행하면 '개발벤제마'라는 문구가 1000번 출력된다. 여기서 조심해야 할 것은 for문의 소괄호() 뒤에는 세미콜론을 붙이면 안 된다는 것인데 만일 for문의 괄호() 뒤에 세미콜론을 붙일 경우 '개발벤제마'가 한 번만 출력된다. 또한 반환값을 지정하는 return 0;이라는 구문을 for문의 중괄호{} 안에 넣을 경우에도 한 번만 출력되는 것을 확인할 수 있다.

정상적으로 1000번 반복됨.
for문의 소괄호()옆에 세미콜론을 확인할 수 있다.

 

원래 붉은색으로 표시된 바와 같이 for문의 중괄호{}밖에 return 0;이 위치해야 '개발벤제마'가 1000번 출력되나, 이 예제에서는 for문의 중괄호 내부에 return 0;을 표기하였기 때문에 '개발벤제마'가 한 번만 출력되었다.
반복문 세 개의 공통점과 차이점 정리.
교수님이 이게 시험에 나온다고 하셔서......
위의 예제를 나눗셈이 소수점까지 나오도록 변경한 후 C++스타일로 변경한 것이다.

이제 너무나도 중요한 클래스와 구조체에 대한 이야기이다.(너무 어렵다............하지만 어려운 만큼 중요하다...........)

시작하기 전에 오늘도 역시 빠질 수 없는 명언 타임!

오늘의 명언은?

괴로운 시련처럼 보이는 것이 뜻밖의 좋은 일일 때가 많다.
-오스카 와일드

그럼 시작하겠다.

구조체는 여러 데이터 필드를 하나로 묶어서 표현할 수 있게 하기 때문에 여러모로 유용하다.

예제를 보면서 설명하겠다

이 예제에서 #include전처리기문 밑에 struct라는 것이 구조체이다. 여기서는 Person이라는 구조체를 선언한 것이다. 구조체 내부에 있는 자료형들을 멤버 변수라고 한다. 여기서는 멤버 변수로 int형(정수형)의 age와 float형(실수형)의 weight를 추가했다. 둘의 자료형이 다른 이유? 조금만 생각해 보면 간단한 문제이다. 나이(age)는 정수로 떨어지지만 위의 예제에서와 같이 몸무게(weight)는 소수점까지 나오기 때문.

C++에서는 struct 대신에 class라는 속성을 사용하는데 이 속성을 사용하기 위해서는 메서드라는 것이 필요하다. 이 메서드는 private과 public 두 가지가 있는데, private 속성은 class 외부에서의 접근이 불가하며(class 내부에서만 호출 가능, class내부 관리에 이용), public속성은 class외부에서도 접근이 가능하다. 예제를 보자

'coco.'을 입력했을 때 age, name과 같은 멤버변수들이 뜨지 않는 것을 볼 수 있다. 이것은 class의 메서드가 private이기 때문이다.

age와 name이라는 멤버 변수가 뜬다.

메서드를 public으로 바꾸었더니 'coco.'을 입력했을때 age와 name이라는 멤버 변수가 뜨는 것을 볼 수 있다.

Dog class를 선언하고 Dog class내부의 public 메서드에 age, name이라는 멤버 변수를 선언한다. 그리고 main 함수 내부에 Dog라는 객체를 선언한다. 바로 위의 예제에서의 coco의 역할을 Dog가 한다고 보면 된다. (이틀 동안 C언어랑 C++ 만 했더니 힘들다.)

 

클래스 다이어그램

우측에 내가 펜으로 조금 지랄맞게 해놓은 부분을 보면 클래스 다이어그램이 보인다. 자세히 보면 -age;int, +getAge() +setAge()와 같이 +,-가 붙어있는 것을 알 수 있다. private메서드에 들어가는 변수(혹은 함수)에는 -를 붙이고 public메서드에 들어가는 변수(혹은 함수)에는 +를 붙인다.

C언어에서의 #define을 이용한 매크로 함수와 비슷한 역할을 하는 함수로 inline함수가 있다. 사용법은 그냥 함수 앞에 inline이라는 키워드를 써주면 된다. 그렇다면 inline함수의 장점은 무엇일까?

프로그램의 전반적인 실행속도가 빨라지지만 그만큼 프로그램의 크기가 커지기 때문에 되도록 코드가 작은 함수일때나 호출 빈도가 적을 때 사용하는 것을 권장한다. 함수의 코드크기가 큰 경우 컴파일러가 inline함수를 일반 함수로 인식할 수도 있으니 주의하자. 또한 C++11버전부터는 컴파일러가 알아서 inline함수를 만들수도 있게 되었다. 클래스 멤버변수의 정의 부분이 짧으면 보통 클래스 선언부 내부에서 함수를 정의하게 된다.(이 경우 선언과 정의가 동시에 이루어지게 된며 자동으로 inline함수가 된다.) 객체가 멤버를 호출하는 방법으로는 직접참조와 간접참조가 있는데 예제를 통해 알아보자.

#include <stdio.h>
class Dog; {
private:
     int age;
publiic:
    int getAge;
    void Bark();
};
int main()
{
      Dog coco, *pcoco;
}
붉은색으로 표시한 부분이 inline함수이다.(5개)

자동 inline함수를 모두 바깥으로 뺐다.(이 예제에는 자동 inline함수가 하나도 없다는 말이 된다.)

이것으로 시험 전 최종 포스팅을 마친다(휴.....)

만일 당신이 진다고 생각하면 당신은 질 것이다.
만일 당신이 안 된다고 생각하면 당신은 안 될 것이다.
만일 당신이 이기고 싶다는 마음 한구석에
이건 무리라고 생각하면, 당신은 절대로 이기지 못할 것이다.
만일 당신이 실패한다고 생각하면 당신은 실패할 것이다.
돌이켜 세상을 보면 마지막까지 성공을 소원한 사람만이 성공하지 않았던가. 모든 것은 사람의 마음이 결정하나니
만일 당신이 이긴다고 생각하면 당신은 승리할 것이다.
만일 당신이 무엇인가를 진정으로 원한다면 그대로 될 것이다. 자아, 다시 한번 출발해 보라.
강한 자만이 승리한다고 정해져 있지는 않다.
재빠른 자만이 이긴다고 정해져 있지도 않다.
나는 할 수 있다고 생각하는 자가 결국 승리하는 것이다.
- 나폴레온 힐, <놓치고 싶지 않은 나의 꿈 나의 인생> 중에서 -