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로 처리된다

업데이트: