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