브래의 슬기로운 코딩 생활
C++프로그래밍 7주차 강의 정리 본문
오늘은 드디어 본격적인 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 class의 happy객체 정의
happy.setAge(3);
happy.getAge(); // ② age는 private멤버로 클래스 밖에서 접근 불가
cout << happy.getAge(); // ③ age는 전용멤버로 접근 불가
return 0;
}
클래스 다이어그램
맨 위에는 클래스 명: Dog
그 아래에는 멤버변수 명: - age : Int
맨 아래에는 멤버함수 명: + getAge(), setAge(int a)
'1-2 > C++프로그래밍' 카테고리의 다른 글
C++프로그래밍 10주차 정리 (0) | 2022.11.03 |
---|---|
C++프로그래밍 9주차 중간고사 정리 (0) | 2022.10.27 |
C++프로그래밍 6주차 강의 정리 (0) | 2022.10.06 |
C++프로그래밍 4주차 정리 (0) | 2022.09.22 |
C++프로그래밍 3주차 정리 (0) | 2022.09.15 |