title: “C++ 2.클래스와 객체” categories:

  • CspecialCharspecialChar

    #C++ 2.클래스와 객체 : 네이버 블로그

C++은 객체를 사용 할 수 있다

클래스(class)를 사용해 객체를 정의 할 수 있다

class는 C언어에서 struct개념과 매우 비슷하지만 class는 상속이 된다는 점에서 차이가 있다

상속의 개념은 후에 설명할테니 지금은 struct와 비슷하다 라고만 알고 있자

​

#include "pch.h"
#include 
using namespace std;
class circle {
public:
 int radius;
 double getarea();
};
double circle::getarea() {
 return radius \* radius\*3.14;
}
int main()
{
 circle a;
 a.radius = 1;
 cout << a.getarea();
}

위는 circle class를 사용한 소스이다

헤더파일은 넘기고 클래스 부분부터 한줄씩 가겠다

​

class circle { 클래스 circle 선언

public: 상속 형식, 후에 설명하니 일단 넘어가자

int radius; radius라는 변수 선언

double getarea(); double형으로 출력하는 getarea()라는 함수, C와 같다

}; //클래스 선언 끝

​

double circle::getarea() { //getarea함수 구현, 재사용을 위해 분리할 수 있다

return radius * radius*3.14; //class안의 radius 변수를 사용

}

​

int main()

{

circle a; //circle 클래스의 객체 생성, 객체 이름은 a이다

a.radius = 1; //’.’을 사용해 객체의 맴버에 접근한다. 즉 a.radius를 사용해 a객체 내의 radius맴버에 접근한다

cout « a.getarea(); getarea함수를 출력한다(radius*radius*3.14)

}

​

C를 이미 하고 왔기 때문에 기초적인 부분은 건너뛰고 바로 클래스부터 설명한다

이해가 어렵다면 C부터 천천히 시작하자

​

#include "pch.h"
#include 
using namespace std;
class circle {
public:
 int radius;
 circle();
 circle(int r);
 double getarea();
};
circle::circle() {
 radius = 1;
}
circle::circle(int r) {
 radius = r;
}
double circle::getarea() {
 return radius \* radius\*3.14;
}
int main()
{
 circle a;
 cout << a.getarea() << endl;

 circle b(10);
 cout << b.getarea() << endl;
}

​

이번엔 생성자에 대해 알아보자 생성자는 클래스의 맴버 중 클래스의 이름과 같은 맴버이다

​

즉 클래스의 선언부 중

class circle { //circle 클래스 선언

public: //상속, 후에 설명

int radius; //클래스 맴버 선언

circle(); //circle 클래스 생성자

circle(int r); //circle 클래스 생성자

double getarea(); //클래스 맴버 선언

};

중요한 부분은 circle(), circle(int r) 부분이다

생성자의 목적은 객체가 처음 시작할때 초기 작업을 하기 위함이다

main 함수 안에 있는 부분을 보면

​

circle a; //circle a

cout « a.getarea() « endl;

​

circle b(10); //circle b(10)

cout « b.getarea() « endl;

​

위 함수를 잘 보면 같은 circle 클래스여도 매개 변수에 따라 다른 생성자를 가짐을 알 수 있다

그렇게 매개변수에 따른 다른 실행을 할 수 있다

​

생성자는 중복 가능하고 클래스와 이름이 같아야 함을 기억하자

또 생성자는 반환형을 가질 수 없다

​

​

#include "pch.h"
#include 
using namespace std;
class rect {
public:
 int w, h;
 rect();
 rect(int m);
 rect(int m, int n);
 int getarea();
};
int rect::getarea() {
 return w \* h;
}
rect::rect() {
 w = 1, h = 1;
}
rect::rect(int m) {
 w = m, h = m;
}
rect::rect(int m,int n) {
 w = m, h = n;
}
int main() {
 rect a;
 cout << a.getarea() << endl;

 rect b(10);
 cout << b.getarea() << endl;

 rect c(3, 5);
 cout << c.getarea() << endl;
}

다음은 매개변수에 따라 다른 생성자를 가지는 코드이다

생성자는 3개이다

매개변수가 아무것도 없는 rect();

매개변수가 하나 있는 rect(int m);

매개변수가 둘 있는 rect(int m,int n);

​

그리고 각각

​

rect a;

​

rect b(10);

​

rect c(3, 5);

​

의 형태로 main 내에서 객체가 생성된다

​

​

​

#include "pch.h"
#include 
using namespace std;
class circle {
public:
 int radius;
 circle();
 circle(int r);
 double getarea();
 ~circle();
};
circle::circle() {
 radius = 1;
}
circle::circle(int r) {
 radius = r;
}
double circle::getarea() {
 return radius \* radius\*3.14;
}
circle::~circle() {
 cout << "소멸자 생성" << endl;
}
int main() {
 circle a;
 cout << a.getarea() << endl;

 circle b(10);
 cout << b.getarea() << endl;

}

다음은 소멸자이다

​

생성자가 있으면 객체가 사라질 때 소멸자 또한 존재한다

즉 소멸자를 통해 객체가 사라지고 메모리가 반환된다

소멸자는 객체가 소멸될 때 자동으로 호출된다

​

circle 클래스의 소멸자는 ~circle 이다

위 클래스 선언부에서 ~circle 를 호출함으로 클래스가 소멸됨을 알 수 있다

​

​

class circle{
private:
public:
protected:
}

위는 클래스의 3가지 접근 지정자이다

맴버의 접근 허용을 구분할 수 있다

private 맴버는 클래스 내의 함수만 접근 가능하다

public 맴버는 클래스 내외의 모든 함수가 접근 가능하다

protected 맴버는 클래스 내의 맴버와 상속받은 파생 클래스만 접근 가능하다

​

접근 지정을 하지 않고 맴버를 선언한 경우 private로 처리된다

​

업데이트: