Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

C++프로그래밍 기말고사 정리 본문

1-2/C++프로그래밍

C++프로그래밍 기말고사 정리

김브래 2022. 12. 11. 18:35

C++ 기말고사는 다음주 목요일 이다.

다음주 중에 시험 범위를 정리할 시간이 별로 없을 것 같아서 미리 정리를 했다.

 

C++ 기말고사 정리

202114013 김동현

 

객체의 멤버 호출

 

직접참조연산자: “.” - 일반 객체가 멤버에 접근하기 위해 사용

간접참조연산자: “->” - 포인터 객체가 멤버에 접근하기 위해 사용

 

배열의 이름은 그 배열의 시작 주소이다

 

생성자: 객체가 생성될 때 자동으로 호출, 클래스명(), 리턴형을 쓰지 않는다, 중첩이 가능하다.

소멸자: 객체가 소멸될 때 자동으로 호출, ~클래스명(), 리턴형을 쓰지 않는다, 중첩이 불가능하다.

 

C++에서 변수를 초기화 하는 방법

int x=1; - copy initialization

int y(2); - direct initialization

int z{3}; - Uniform initialization, C++11

int z1{}; (자동으로 0) - Uniform initialization, C++11

 

함수에 사용하는 const

매개변수가 cont

리턴값이 const

함수가 const, 멤버변수를 변경하지 않는 함수 함수명 뒤에 const

 

동적 메모리를 사용하는 이유

지역변수를 프로그램이 끝날 때까지 값을 유지하고 싶은 경우

프로그램을 실행할 때 메모리의 양을 결정해야 하는 경우

스택 공간이 부족하면 stack overflow 오류가 나기 때문에 heap에 할당해야하는 경우

 

동적 메모리의 단점

스택보다 느림

동적으로 확보된 기억공간은 주소를 사용하므로 포인터에 대한 이해가 필요

 

동적 메모리의 할당과 해제: new, delete

 

- 기본 자료형

int *pi = new int; // 할당

delete pi; // 해제

- 배열

int *pi = new int[5]; // 할당

delete []pi; // 해제 (주의 []써야 함)

배열의 이름은 배열의 시작 주소

 

함수중첩 (오버로딩)을 하는 2가지 경우

매개변수의 형이 다른 경우

매개변수의 개수가 다른 경우

 

생성자 중첩 하나의 클래스에 생성자가 여러 개 정의

 

디폴트 인자 선언부에서 작성하고 정의 부에서는 작성하지 않음

 

 

상속(inheritance)은 코드 재사용을 위한 것

- 기본 클래스 (base class) inherits from 파생 클래스 (Derived class)

is_a 관계

class 파생클래스:상속접근제어 기본클래스명{};

상속접근제어

private, protected, public

public을 가장 많이 씀

부모의 private 멤버 변수는 어떻게 해도 상속이 안된다.

 

protectedprivate의 공통점과 차이점

공통점: 둘다 외부에서 접근하지 못한다.

차이점: private은 상속이 안되지만 protected는 상속이 가능하다.

 

그래서 보통 멤버변수는 protected로 하고 상속은 public으로 한다.

 

생성자 소멸자의 순서

부모의 생성자, 자식의 생성자, 자식의 소멸자, 부모의 소멸자 순으로 호출

 

파생클래스의 생성자에서 기본클래스의 생성자에 매개변수 전달 형식

파생클래스생성자(매개 변수 리스트):기본클래스생성자(매개 변수 리스트){};

 

클래스 다이어그램:

맨 위에는 클래스 명,

중간에는 private변수명:자료형, protected# 변수명:자료형

맨 밑에는 + 함수명

자식에서 부모로 화살표

 

오버로딩(중첩)과 오버라이딩(중복)의 차이점

- 오버로딩은 클래스 내에 같은 이름을 가진 함수가 있는 것이고 오버라이딩은 부모와 자식 클래스에 같은 이름을 가진 함수가 있는 것이다.

- 오버로딩은 함수이름만 같고 매개변수의 형이나 개수가 달라야하지만, 오버라이딩은 함수이름도 같고 매개변수의 형과 개수, 리턴형도 같고 리런값만 달라야 한다.

 

오버라이딩 부모클래스의 함수 앞에 virtual 키워드를 붙인다. (가상 함수)

virtual 리턴형 함수명 (매개변수){};

 

virtual이 없으면 부모클래스의 함수가 실행되고 있으면 자식클래스의 함수가 실행됨

 

static 멤버 변수 모든 객체가 공유하는 멤버 변수, 선언을 하면 정의를 반드시 해주어야 함

 

탬플릿 구현 형식

template <class 자료형 이름> 리턴형 함수 이름(매개변수 리스트){};

template <class T> void SS(T x, T y){}; // T: 결정하지 않은 자료형

템플릿을 이용하여 일반화된 클래스 구현

template <class T1, class T2> class CCC

{

T1 x;

T2 y;

public:

CCC(T1 xx, T2 yy) {x=xx, y=yy}

}

int main

{

CCC<int, int> c1(10,20);

CCC<double, double> c2(3.5,5.5);

CCC<char, const char*> c3(‘I’, “Love You!”);

 

return 0;

}

 

형식 설정 맴버함수

cout.width(int w); : 출력 폭을 w로 지정

cout.precision(int p); : 소수점을 포함하지 않는 전체 자리수를 p로 지정, 소수점 이하 자리수를 지정하고 싶으면 cout<<fixed를 먼저 지정

cout.fill(char c); : 빈칸에 c문자를 채움

 

( width() 함수는 출력할 때 마다 값을 입력해주어야 하지만 fill() 함수는 한번 지정하면 효과가 계속 유지된다.)

 

입출력 조절자

cout.width(5); cout << 50; = cout << setw(5) << 50;

(setw()와 같이 매개변수를 갖는 조절자를 사용하기 위해서는 헤더파일 <iomanip>를 포함해야 한다.)

 

hex = 16진수 / oct = 8진수

cout << setfill() = cout.fill() / cout << setw() = cout,width()

cout << setiosflags(ios::left) = 왼쪽 정렬

 

파일 입출력을 위해 포함해야 하는 헤더 파일 - <fstream>

파일 입출력을 위한 클래스 ifstream (파일 읽기), ofstream (파일 쓰기), fstream (입출력 둘다)

 

파일을 개방하는 2가지 방법

파일클래스 스트림객체명(파일명, 개방모드); // 개방모드는 생략 가능

파일클래스 스트림객체명;

스트림객체명.open(파일명, 개방모드); // 개방모드는 생략 가능

 

파일을 종결하는 방법

스트림객체명.close();

 

파일클래스 ifstream, ofstream, fstream

개방모드 ios::in(입력), ios::out(출력) // 생략 가능

 

여기 내가 포스팅하지 않은 내용들도 있을것 이다

왜냐하면 15주차 수업을 내가 포스팅하지 않았기 때문인데

포스팅할 여유가 없었다.

아무튼 또 다른 시험을 준비하러 가봐야겠다