구조체와 비슷..하다
Struct 구조체로 선언된 변수와 함수는 별도의 접근제어 지시자가 없다면
=>Public이기에 함수외부에서 변경이 가능했다.
Class 클래스로 선언된 변수와 함수는 별도의 접근제어 지시자가 없다면
=> Private이기에 클래스 내의 함수를 통해 변경이 가능하다.
...
class people
{
private:
char nameID[20];
int Age, Weight, Height;
public:
void peopleinit(const char* name, int age, int weight, int height);
void show_peopleStruct();
};
int main(void)
{
people A;
A.peopleinit("sm", 25, 175, 65);
A.show_peopleStruct();
}
void people::peopleinit(const char* name, int age, int weight, int height)
{
strcpy_s(nameID, name);
Age = age;
Weight = weight;
Height = height;
}
}
Const 함수
함수 선언 끝에 const를 붙인다면, const함수 내에서 멤버변수의 값을 변경할 수 없다.=>컴파일 오류
Const함수 내에서 const가 아닌 함수로 호출이 제한된다.
캡슐화의 어려운점.. => 기능을 어디까지 넣어야하는 것인가. 범위를 결정짓는 것이 어려움.
Private으로 선언된 변수들을 캡슐화 하여, 변수 접근의 보안성이 향상.
특징
- 생성자의 형태는 class의 이름과 함수의 이름이 동일.
- 반환형이 선언되어 있지 않으므로, 실제로 반환 불가.
- 생성자도 함수의 일종으로, 오버로딩이 가능.
- 생성자도 함수의 일종으로, 매개변수에 ‘디폴트 값'을 설정할 수 있음.
Person man[3];
Person * ptrArr = new Person[3];
Person * man[3];
this 포인터의 활용 : 매개변수와 객체 내에 변수가 존재할 때, 중복이 되지 않기 위해 사용가능.
//c 스타일 초기화
int a = 30;
int &ref = num;
//c++ 스타일 초기화
int num(20);
int &ref(num);
=> Class의 경우도 똑같다.
class sosimple
{…
}
sosimple sim1;
sosimple sim2 = sim1;
sosimple sim2(sim1);
복사 생성자
별도의 정의 가능.
자동으로 삽입이 되는
default copy constructor 도 가능.
Called destructor가 한 번만 출력이 되었다.
=> 얕은 복사를 하면서 객체의 name이 공유되는데.
지워졌기 때문에.
Class의 멤버변수만 복사가 아닌, 포인터로 참조하는
대상까지 깊게 복사한다는 뜻.
? 해당 부분은 생각해보자.