https://reakwon.tistory.com/143
[C++] 클래스와 상속(Inheritance)의 개념과 사용법, 캡슐화의 이해
C++ 상속(Inheritance) 다른 여타의 객체지향언어와 같이 C++ 역시 상속을 할 수 있습니다. 여러분은 현실 생활에서 상속이라는 개념을 알고있으신가요? 부모님으로부터 100억을 상속을 받으셨다면 이
reakwon.tistory.com
1.
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Person {
private:
int age;
char name[30];
public:
Person(int _age, const char* _name): age(_age) {
strcpy(name, _name);
}
void myName() const
{
cout << "my name: " << name << endl;
}
void myAge() const
{
cout << "my age: " << age << endl;
}
};
class UnivStu : public Person
{
private:
char major[30];
public:
UnivStu(const char* _name, const char* _major, int _age) : Person(_age,_name)
{
strcpy(major, _major);
}
void myMajor() const
{
cout << "my name: " << major << endl;
}
void showYourInfo()
{
myName();
myAge();
myMajor();
}
};
int main(void)
{
UnivStu me("kim", "it", 25);
me.showYourInfo();
UnivStu park("park", "it", 28);
UnivStu Lim("Lim", "it", 29);
Lim.showYourInfo();
park.showYourInfo();
system("pause");
}
2.
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
using namespace std;
class Person
{
private:
int age;
char* name;
public:
Person(const char* myname, int myage) : age(myage)
{
cout << "생성자 생성" << endl;
name = new char[strlen(myname) + 1];
strcpy(name, myname);
}
~Person()
{
cout << "생성자 소멸과 동적할당 해제" << endl;
delete[] name;
}
void whatsyourname() const
{
cout << "name: " << name << endl;
}
void whatsyourage()
{
cout << "age: " << age << endl;
}
};
class univStu : Person
{
private:
char* major;
public:
univStu(const char* myname, const char* mymajor, int myage) : Person(myname, myage)
{
cout << "생성자 생성" << endl;
major = new char[strlen(mymajor)+1];
strcpy(major, mymajor);
}
~univStu()
{
cout << "생성자 소멸과 동적할당 해제" << endl;
delete []major;
}
void whatsyourmajor() const
{
cout << " major: " << major << endl;
}
void showYou()
{
whatsyourname();
whatsyourage();
whatsyourmajor();
}
};
int main(void)
{
univStu s("KIM", "ASD", 25);
s.showYou();
char a;
return 0;
}

major = new char[strlen(mymajor)+1]; 동적 할당 시 문자열 사이즈에 +1(\n, 널 값오기에 +1함) 안하면 위와 같은 에러남.
3.
상속 시 접근 제한 여부
위 예제에서도 컴파일 에러가 난다.
https://blog.naver.com/vjhh0712v/221545003919
C++ 가상함수(Virtual Function), 오버라이딩(Overriding), 다형성, 정적바인딩, 동적바인딩
이번 포스팅은 상속을 좀 더 응용하여 효율적이게 사용가능한 기능들을 살펴보겠습니다. 먼저 C++의 가장 ...
blog.naver.com
C++ 가상함수(Virtual Function), 오버라이딩(Overriding), 다형성, 정적바인딩, 동적바인딩
다시 해볼것.
상속 시 접근 제한 여부
//상속 시 접근제한여부
#include <iostream>
using namespace std;
class A
{
private:
int x;
int y;
protected:
int xz;
public:
int z;
A(int x, int y)
{
this->x = x;
this->y = y;
}
int Add()
{
return this->x + this->y;
}
};
class B : private A
{
public:
B(int x, int y) : A(x, y) {}
void Result()
{
cout << Add();
}
};
int main(void)
{
B b(3, 5);
b.Result();
b.xz;
cout << endl;
system("pause");
}