상세 컨텐츠

본문 제목

Class 관계 - Has ~ a 관계(C++)

C++ 언어

by ChrisMare 2018. 3. 8. 13:48

본문

C++의 class 관계

1. has ~a (Data 와 관리 class) -> 포함 오브젝트.

2. is ~a (상속 구조) -> 상속.


- has ~ a

Data와 data들을 관리하는 클래스 즉, 포함 오브젝트인데요....


포함 오브젝트란?


Main에서 바로 A를 접근 하지를 못하기 때문에 B객체에 또다른 A객체인 aa를 가지고

데이터를 접근하는 용도인 메소드를 만들어 접근한다.

Main에서 객체 B를 통해서 A를 접근해서 데이터를 쓰기 때문에

이 방식으로 운용한다면 캡슐화 즉, 데이터를 보호, 은닉할 수 있다.

Ex1) 메소드를 통한 접근


#include <iostream>

#include <string>

using namespace std;


class A

{

string name;

public:

void setName(string name)

{

this->name = name;

}

string getName()const // 값만 가져오는것=>바뀌면안되기 때문에 const

{

return name;

}

};


class B

{

A aa;     // 포함 오브젝트

int age;

public:

// 포함오브젝트 연결(메소드를 통해서 A객체 필드접근)

void setName(string name)

{

aa.setName(name);

}

string getName()const // 값만 가져오는것=>바뀌면안되기 때문에 const

{

return aa.getName();

}

void setAge(int age)

{

this->age = age;

}

int getAge()const // 값만 가져오는것=>바뀌면안되기 때문에 const

{

return age;

}

};


void main()

{


B bb;

bb.setName("미래를 설계하는 개발자"); // 이름 입력

bb.setAge(25);    // 나이 입력

cout << bb.getName() << endl;         // 이름 출력

cout << bb.getAge() << endl;           // 나이 출력

}


Ex2) Ex1 확장... 콜론 초기화를 통한 값넣기!!!


#include <iostream>

#include <string>

using namespace std;


class A

{

string name;

public:

// Constructor

A()

{

cout << "A's Constructor" << endl;

}

A(string name)

{

this->name = name;

}

void setName(string name)

{

this->name = name;

}

string getName()const // 값만 가져오는것=>바뀌면안되기 때문에 const

{

return name;

}

};


class B

{

A aa; // 포함 오브젝트

int age;

public:

// Constructor

B()

{

cout << "B's Constructor" << endl;

}

B(string name, int age):aa(name)

{

this->age = age;

}


// 포함오브젝트 연결

void setName(string name)

{

aa.setName(name);

}

string getName()const // 값만 가져오는것=>바뀌면안되기 때문에 const

{

return aa.getName();

}

void setAge(int age)

{

this->age = age;

}

int getAge()const // 값만 가져오는것=>바뀌면안되기 때문에 const

{

return age;

}

};


void main()

{

B bb;

bb.setName("미래를 설계하는 개발자"); // 이름 입력

bb.setAge(25);    // 나이 입력

cout << bb.getName() << endl;         // 이름 출력

cout << bb.getAge() << endl;           // 나이 출력

}


관련글 더보기

댓글 영역