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");
}

'C_C++' 카테고리의 다른 글

c++레퍼런스  (0) 2021.08.26
기본 5 템플릿  (0) 2021.07.14
기본4  (0) 2021.07.14
기본3  (0) 2021.07.14
C++ 기본1  (0) 2021.07.13

+ Recent posts