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++프로그래밍 7주차 강의 정리 본문

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

C++프로그래밍 7주차 강의 정리

김브래 2022. 10. 13. 17:29

오늘은 드디어 본격적인 C++언어 영역이라고 할 수 있는

클래스에 대해서 배웠다.

 

일단 객체지향 프로그래밍 언어의 특징 3가지를 알아야한다.

1. 캡슐화

2. 상속성

3. 다형성 이다.

 

클래스의 접근 권한 중에는

1. private

2. public

3. protected 

가 있다.

 

먼저 private속성은 해당 클래스 내부에서만 접근이 가능하고 생략이 가능한 속성이다.

그러므로 private속성의 변수는 매인 함수라던지 다른 코드블록에서는 접근이 불가능하다는 것이다.

이게 바로 첫번째 특징 '캡슐화'이다.

 

그리고 public속성은 어디에서든지 접근이 가능하다

 

마지막으로 protected는 private와 같지만 상속클래스가 있는 경우 그곳에서는 접근이 가능하다.

간단히 상속을 설명하자면 부모클래스와 자식클래스와 같이 수퍼클래스, 파생클래스 등 이런걸 만들 수 있는 것이다

여기서 말한 상속클래스로 상속성을 말할 수 있는데 이번 시간에는 상속을 배우지 않아서 그냥 넘어가도록 하자.

 

다형성은 하나의 함수이름 이나 연산자를 여러 목적으로 사용하는 것을 말한다.

이것도 아직 안 배웠다.

 

그리고 함수를 만들 때 함수 앞의 void는 생략 불가능 하지만 리턴값이

없을 때 매개변수 자리에 쓰는 void는 생략 가능하다.

 

또 함수를 만드는 것은 함수 정의

함수 호출은 말그대로 메인 함수에서 함수를 호출하는 것이고

함수 정의를 따로 하고 함수명만 때서 프로그램 앞쪽에 적는것은 함수 선언(또는 원형, prototype)이다.

 

-단축키-

Ctrl + M + O = 코드 접기

Ctrl + M + L = 코드 펼치기

 

또 멤버함수를 클래스 내부에서 정의 할 수도 있고 클래스 밖에서 정의 하고 내부에 선언하는 방식이 있다.

클래스 안에서 정의 하는 경우는 잘 사용하지 않는다.

 

'::'은 범위 지정 연산자 이다.

ex) std::cout

 

namespace는

모든 식별자가 유일하도록 보장하는 코드 영역을 정의 하는 것이다.

 

마지막으로 inline 함수 라는 것이 있는데

함수 선언이나 정의 앞에 inline키워드를 사용하여 정의 하고

컴파일러에 의해 처리되며 텍스트가 아닌 함수 코드 블록의

복사본인 기계어 코드가 직접 삽입이 되어

한번만 수행할 경우에는 더 빠르다.

하지만 여러번 반복하여 사용한다면 오히려 더 느려진다.

 

클래스 내부에서 함수가 정의가 된다면 그 함수는 

자동 inline함수가 된다.

 

하지만 함수를 클래스 내부에서 선언하고 외부에서 정의가 된다면

그 함수는 일반 함수 이다

 

-------------------------------------------------------------------------------------

(과제)

 

객체지향프로그램의 3가지 특징

캡슐화 상속성 다형성

 

상속

부모클래스, 파생클래스

자식클래스, 수퍼클래스

 

다형성

-하나의 함수, 하나의 연산자로 다양한 역할 수행이 가능한 것

 

클래스 다이어그램

클래스 이름, 맴버변수, 맴버함수

 

클래스의 접근권한

-private: 클래스 내부 에서만 접근가능

#include <iostream>

 

struct Dog {

int age; //멤버 변수

};

int main() {

Dog brae;

brae.age = 11;

std::cout<< brae.age;

 

}

 

#include <iostream>

class Dog {

private: //클래스 안에서만 접근 가능 (캡슐화) / 생략가능

int age; //멤버 변수

public: //어디서나 접근 가능

int age1; //멤버 변수

protected: // private와 같지만 파생 클래스의 멤버 함수만 접근 가능하다./상속을 안하면 }; // private와 같다

int main() {

Dog brae;

brae.age1 = 11;

std::cout<< brae.age1;

 

}

함수 매개변수의 void는 생략 가능하지만 리턴값이 없으면 함수명 앞에 void를 받드시 써야한다.

 

함수 만들기 = 함수 정의

매인 함수에서 만든 함수 호출 = 함수 호출

함수 이름에 세미콜론 = 함수 선언, 원형, prototype

 

Ctrl + M + O = 코드 접기

Ctrl + M + L = 코드 펼치기

 

#include <iostream>

#include <string> //string, 비쥬얼 스튜디오에서는 <iostream>에 스트링이 포함되어 있어 생략 가능

//using namespace std;

std::string vending(int x); //선언

int main()

{

std::cout << vending(1); //호춸

return 0;

}

std::string vending(int x) //정의

{//std::string

if (x == 1) return "커피";

else return "유자차";

}

 
 

클래스 다이어그램

 

맨 위에는 클래스 명

그 아래에는 멤버변수

맨 아래에는 멤버함수를 쓴다.

 

private 속성이라는 뜻이고 +public 속성 이라는 뜻이다.

 

#include <iostream>

class Dog {

private: //클래스 안에서만 접근 가능 (캡슐화) / 생략가능

int age; //멤버 변수

public:

int getAge() {

return age;

}

void setAge(int a) {

age = a;

}

void bark() {

std::cout << "므앙므앙~~\n";

}

};

 

int main() {

Dog brae;

brae.bark();

brae.bark();

brae.setAge(1);

brae.bark();

std::cout << brae.getAge() << std::endl;

brae.bark();

brae.bark();

}

 

1단계 함수들을 클래스 밖으로 내보넴

 

#include <iostream>

class Dog {

private: //클래스 안에서만 접근 가능 (캡슐화) / 생략가능

int age; //멤버 변수

public:

 

};

int getAge() {

return age;

}

void setAge(int a) {

age = a;

}

void bark() {

std::cout << "므앙므앙~~\n";

}

int main() {

Dog brae;

brae.bark();

brae.bark();

brae.setAge(1);

brae.bark();

std::cout << brae.getAge() << std::endl;

brae.bark();

brae.bark();

}

 

2단계: public속성 안에 함수 선언을 해준다]

#include <iostream>

class Dog {

private: //클래스 안에서만 접근 가능 (캡슐화) / 생략가능

int age; //멤버 변수

public:

int getAge();

void setAge(int a);

void bark();

};

int getAge() {

return age;

}

void setAge(int a) {

age = a;

}

void bark() {

std::cout << "므앙므앙~~\n";

}

int main() {

Dog brae;

brae.bark();

brae.bark();

brae.setAge(1);

brae.bark();

std::cout << brae.getAge() << std::endl;

brae.bark();

brae.bark();

}

 

3단계: 함수 정의 부분 앞에 클래스 이름 ::을 붙인다

 

#include <iostream>

class Dog {

private: //클래스 안에서만 접근 가능 (캡슐화) / 생략가능

int age; //멤버 변수

public:

int getAge();

void setAge(int a);

void bark();

};

int Dog::getAge() {

return age;

}

void Dog::setAge(int a) {

age = a;

}

void Dog::bark() {

std::cout << "므앙므앙~~\n";

}

int main() {

Dog brae;

brae.bark();

brae.bark();

brae.setAge(1);

brae.bark();

std::cout << brae.getAge() << std::endl;

brae.bark();

brae.bark();

}

 

 

#include <iostream>

using std::cout;

class Dog {

private:

int age;

public:

int getAge() //자동 inline 함수

{

return age;

}

void setAge(int a)

{

age = a;

}

};

 

int main()

{

Dog happy; // Dog classhappy객체 정의

happy.setAge(3);

happy.getAge(); // ageprivate멤버로 클래스 밖에서 접근 불가

cout << happy.getAge(); // age는 전용멤버로 접근 불가

return 0;

}

 

클래스 다이어그램

 

맨 위에는 클래스 명: Dog

그 아래에는 멤버변수 명: - age : Int

맨 아래에는 멤버함수 명: + getAge(), setAge(int a)