2021-04-21 c++ 접근지정자
2021. 4. 21. 11:46ㆍ카테고리 없음
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
/*
접근지정자
public(아무나 접근가능), private(해당클래스 안에서만 사용 가능), protected(main 외부에서는 사용 불가능하고 내부에서는 접근가능하다 => 자식클래스 가능)
*/
class Animal {//상속해주는 클래스의 멤버 변수, 함수를 외부에서도 활용할 수 있다.
public:
int legs;
char name[50];
Animal(int legs, const char* name) {
printf("동물 생성자 실행\n");
this->legs = legs;
strcpy(this->name, name);
}
void printAnimalInfo() {
printf("다리의 갯수 : %d\n", legs);
printf("이름 : %s\n", name);
}
};
class Dog : public Animal {
public:
Dog() : Animal(4,"개"){
printf("Dog 생성자 실행\n");
}
};
class Person : public Animal {
public:
char regist_no[30];
Person(const char* regist_no) : Animal(2, "사람") {
printf("사람 생성자 실행\n");
printf("%s\n", regist_no);
// legs = 2;
// strcpy(name, "사람");
}
void printLegs() {
printf("Person의 다리갯수 : %d\n",this->legs)
}
};
int main() { //정적인 클래스보다 동적인 클래스에서 더 많이 사용한다.
Animal* animal;
Person* person = new Person("1234-9999");
printf("%d\n", person->legs); //public일 경우 접근 가능하지만 다른 경우는 접근 불가능하다
Dog* dog = new Dog;
dog->printAnimalInfo();
person = (Person*)dog; // 동물은 사람이다. animal에 들어있는 값이 person인지 dog인지 모를 때 강제 형변환 책임은 개발자 책임
// *다형성* 형변환해서 자식끼리 구조가 완벽히 동일하면 성공
person->printAnimalInfo();
return 0;
}
728x90