티스토리 뷰

c++

C++ 클래스와 객체,생성자

삼전동해커 2020. 7. 1. 17:02

□캡슐화

객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 함.

데이터에 대한 보안,외부 접근 제한을 위해 사용

□클래스

객체를 만들어내기 위해 정의된 설계도

클래스는 객체랑 다르다.

하나의 클래스로 여러개의 객체 생성이 가능하다.

클래스 내에 멤버 변수와 멤버 함수를 선언한다.

□객체

생성 될 때 클래스의 모양을 그대로 가지고 탄생한다.

멤버 변수와 멤버 함수로 구성

메모리에 생성되며 '실체'라고도 불린다.

 

□클래스 작성하기

클래스 선언부와 구현부로 구분된다.

선언부는

class 키워드를 이용해 클래스를 선언하고

멤버 변수와 멤버 함수를 선언한다.

 

단 변수는 선언 내에서 초기화 될 수 없고,

함수는 원형 형태로 선언해야 한다.

 

멤버 변수에 대한 접근 권한은

private ,public, protected로 나뉜다.

디폴트 값은 private이다.

public은 모든 클래스나 객체에서 멤버 접근이 가능하다는 표시.

 

구현부는

클래스에 정의된 모든 멤버 함수를 구현.

 

#include<iostream>
using namespace std;

//클래스 선언부
class Circle{    //class 키워드를 이용하고 Circle이라는 클래스 이름 부여
public:  //접근 지정자
int radius;
double getARea();
}; //선언부는 세미콜론으로 끝난다.

//클래스 구현부
double Circle::getArea(){   //double이라는 리턴타입, Circle클래스,getArea함수명
return 3.14*radius*radius;  //getArea함수 구현
}

int main(){
Circle donut;  //Circle 클래스를 이용해 donut 객체 생성
donut.radius = 1; //donut객체의 멤버 변수 radius에 접근
double area = donut.getArea(); //변수 area에 donut의 멤버함수 getArea저장

cout<<"donut 면적은 " << area <<endl;

donut 면적은 3.14

□생성자

객체가 생성되는 시점에서 자동으로 호출되는 멤버 함수

클래스 이름과 동일한 멤버 함수

 

class Circle{

Circle(); //클래스 이름과 동일한 생성자 선언, 리턴타입이 선언되지 않았다.
Circle(int r); //생성자는 여러개 선언 가능
};  //선언부

Circle::Circle(){  //Circle 클래스의 매개변수 없는 생성자
.........
}  //구현부

Circle::Circle(int r){  //Circle 클래스의 매개변수를 가진 생성자
........
}  //구현부

-생성자의 목적은 객체가 생성될 때 객체가 필요한 초기화를 위해서.

-생성자의 이름은 클래스이름과 동일해야 한다.

-생성자는 리턴 타입을 선언하지 않는다.

-객체 생성 시 오직 한번만 호출.자동으로 호출된다.

-중복이 가능하다.

-생성자가 없으면 매개 변수가 없는 생성자 자동으로 생성

 

#include <iostream>
using namespace std;

class Circle {
public:
	int radius;
	Circle(); // 매개 변수 없는 생성자
	Circle(int r); // 매개 변수 있는 생성자

	double getArea();
};

Circle::Circle() { //매개 변수 없는 생성자 구현
	radius = 1;
	cout << "반지름 " << radius << " 원 생성" << endl;
}

Circle::Circle(int r) {//매개 변수 있는 생성자 구현
	radius = r;
	cout << "반지름 " << radius << " 원 생성" << endl;
}

double Circle::getArea() {
	return 3.14*radius*radius;
}

int main() {
	Circle donut; // 매개 변수 없는 생성자로 donut 객체 생성
	double area = donut.getArea();
	
    cout << "donut 면적은 " << area << endl;

	Circle pizza(30); // 매개 변수 있는 생성자로 pizza 객체 생성

	area = pizza.getArea();
	cout << "pizza 면적은 " << area << endl;
   }

□위임 생성자

여러 생성자에 중복 작성된 코드의 간소화

타겟 생성자와 이를 호출하는 위임 생성자로 나누어 작성

Circle::Circle(){
	radius = 1;
    cout << "반지름" << radius << "원 생성" << endl;
}

Circle::Circle(int r){
	radius = r;
    cout << "반지름" << radius << "원 생성" << endl;
}

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

Circle::Circle : Circle(1){} //Circle(int r)의 생성자 호출 ,위임 생성자

Circle:Circle(int r){  //타겟 생성자
	radius = r;
    cout << "반지름" << radius << "원 생성" << endl;
}

□다양한 생성자의 멤버 변수 초기화 방법

class Point{
	int x,y;
public:
	Point();
    Point(int a,int b);
};

(1)생성자 코드에서 멤버 변수 초기화
Point::Point(){
	x=0;
    y=0;
}  //생성자 구현부
Point::Point(int a,int b){
	x=a;
    y=b;
}  //생성자 구현부

(2)생성자 서두에 초깃값으로 초기화
Point::Point():x(0),y(0){}  //멤버 변수 x,y를 0으로 초기화
Point::Point(int a,int b)
	:x(a),y(b)				//x=a,y=b로 초기화
}

(3)클래스 선언부에서 직접 초기화
class Point{
	int x=0,y=0;
public:
.....
};
댓글
댓글쓰기 폼
공지사항
Total
54,106
Today
15
Yesterday
162
링크
«   2022/10   »
            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          
글 보관함