도슐랭스타
C++ 맛보기와 C복습(4)-구조체, 객체지향 프로그래밍 본문
C++ 기본 소스
#include <iostream>
int main()
{
std::cout << "Helo World!" << std::endl;
}
C의 구조체는 변수만 멤버로 넣을 수 있지만 C++의 클래스는 변수와 함수를 멤버로 넣을 수 있다!
#include <iostream>
struct Man {
int age; //멤버
double weight;
};
int main()
{
struct Man dodo; //C++에서는 struct을 생략해도 된다.
dodo.age = 100;
dodo.weight = 50;
std::cout << dodo.age << std::endl;
std::cout << dodo.weight << std::endl;
}
C++에서는 struct을 생략해도 된다.
#include <iostream>
struct Man {
int age; //멤버
double weight;
};
int main()
{
Man minsu;
Man *minjung;
minsu.age = 1; //일반 구조체는 "."으로 접근
minjung->age =2; //포인터 구조체는 "->"로 접근
}
#include <iostream>
struct Man {
int age; //멤버
double weight;
};
int main()
{
Man dodo = { 1, 3.5 };
std::cout << dodo.age << " " << dodo.weight << std::endl; //1 3.5
dodo.age = 10;
dodo.weight = 30.5;
std::cout << dodo.age << " " << dodo.weight << std::endl;//10 30.5
}
#include <iostream>
struct Man {
int age; //멤버
double weight;
};
int main()
{
Man dodo = { 1, 3.5 }, dodo1;
dodo1 = dodo; //멤버 복사
std::cout << dodo1.age << " " << dodo1.weight << std::endl;
std::cout << dodo.age << " " << dodo.weight << std::endl;
}
대입하면 멤버들이 모두 복사된다.
소프트웨어 위기(software crisis)
- 소프트웨어의 대규모화, 복잡화 -> 개발비용 증가
- 소프트웨어 가격 상승폭 증가
- 유지보수의 어려움과 개발 적체 현상 발생
객체 지향 프로그래밍은 자료와 처리하는 동작이 한 꺼번에 묶인다.
클래스는 객체의 타입(Object Type)이다. 클래스는 설계도이고 그 설계도로 만든 집이 객체이다.
객체는 구체적으로 존재하는 단 하나만이어야한다.
ex. 클래스가 개라면 인스턴스(객체)는 우리집 강아지=구체적인 몸무게, 품종, 이름 등 구체적인 자료를 대입할 수 있음.
ex. 클래스가 고양이라면 인스턴스(객체)는 우리집 고양이= 구체적인 몸무게, 품종, 이름 등 구체적인 자료를 대입할 수 있음.
객체지향 프로그래밍의 중심 기술
- 캡슐화
- 상속성
- 다형성
클래스를 만드는 것 자체가 캡슐화를 하는 것임.
상위 클래스의 속성을 상속받은 하위 클래스 : 파생 클래스(derived class), 자식 클래스(child class, subclass) :
상위 클래스 : 기본 클래스(base class), 부모 클래스(parent class, superclass)
다형성 - 이름을 하나만 쓰는 것.
#include <iostream>
class Man {
int age; //멤버
double weight;
};
int main()
{
Man dodo = { 1, 3.5 }, dodo1;
dodo1 = dodo;
std::cout << dodo.age << " " << dodo.weight << std::endl;
std::cout << dodo1.age << " " << dodo1.weight << std::endl;
}
이렇게 하면 에러가 난다.
#include <iostream>
class Man {
private: //지역변수로 만들어준다.
int age; //멤버
double weight;
};
int main()
{
Man dodo = { 1, 3.5 }, dodo1;
dodo1 = dodo;
std::cout << dodo.age << " " << dodo.weight << std::endl;
std::cout << dodo1.age << " " << dodo1.weight << std::endl;
}
이렇게 해도 에러가 난다.
#include <iostream>
class Man {
public: //전역변수로 만들어줌.
int age;
double weight;
};
int main()
{
Man dodo = { 1, 3.5 }, dodo1;
dodo1 = dodo;
std::cout << dodo.age << " " << dodo.weight << std::endl;
std::cout << dodo1.age << " " << dodo1.weight << std::endl;
}
public:을 써주면 전역변수로 만들어서 어디서도 밑의 변수들을 접근할 수 있게 된다.
관리하기 쉬워서 대부분 private로 변수를 감춰서 지정해둔다.
#include <iostream>
class Man {
private: //캡슐화한 것.(감췄음)
int age;
double weight;
public:
int getAge() { //출력함수, 리턴 / 리턴할 값의 자료형을 함수의 자료형으로 준다.
return age;
}
int getWeight() {
return weight;
}
void setAge(int a) { //입력함수, 대입 / 리턴할 값이 없으면 void를 함수의 자료형으로 준다.
age = a;
}
void setWeight(int w) {
weight = w;
}
};
int main()
{
Man dodo;
dodo.setAge(100); //이제 접근할 수 있는 것은 전역함수만 있음.(dodo.age는 사용 불가능)
dodo.setWeight(20);
std::cout << dodo.getAge() << std::endl;
std::cout << dodo.getWeight() << std::endl;
}
지역변수인 age와 weight를 사용할 수 있는 문이나 통로 같은 개념으로 전역함수를 만들고 사용한다.
캡슐화가 되어있지 않으면 나중에 변수 멤버의 값이 막 바뀔 수 있다.
소스 재활용에도 용이하다.
도슐랭스타
★★☆☆☆ :어렵,,
오.. 객체지향은.. 어렵네요.. 자바스크립트에서 조금이라도 배웠으니 괜찮을 줄 알았는데 아니다!!!ㅋㅋㅋㅋㅋㅋㅋ
C++에서의 클래스는 그저 '틀' 그자체임 그저 '설계도'니까 이걸로 직접 무엇을 할 수는 없지만 js에서의 프로토타입은 '틀'이면서 확장이 가능한 '원형'이다. 그 원형을 복사해서 어딘가를 조금 수정하면 인스턴스다. 그래서 프로토타입으로 만든 인스턴스는 그 자체로도 또 하나의 프로토타입이 될 수 있는 것이다!!!
예전에 js 객체를 설명했던 글의 그림에서 하트의 프로토타입은 사실 점선이 아닌 실선의 그저 색이 없는 하트가 더 맞는 말이다.(틀의 기능만을 하는 것은 아니라는 의미)
js의 객체가 궁금하다면 여기로↓
JavaScript-객체(object)
객체 '복합 자료형'이다. 객체 안에 숫자, 문자열 등 여러 가지 자료형이 포함되기 때문이다. 언제 사용하는가? 회원 정보를 저장한다면 이름, 아이디, 비밀번호, 생년월일, 가입 날짜, 이메일 등
dodo5517.tistory.com
출처:https://www.youtube.com/@smilehan8416
Smile Han
www.youtube.com
'C++' 카테고리의 다른 글
C++ - 객체와 멤버 생성자 소멸자 this (1) | 2023.11.01 |
---|---|
C++-구조체와 클래스 (0) | 2023.10.18 |
C++ 맛보기와 C 복습(3)-함수, 구조체 (0) | 2023.09.27 |
C++맛보기와 C복습(2)-제어문 (0) | 2023.09.20 |
C++ 맛보기와 C복습(1)-연산자 (0) | 2023.09.13 |