다음과 같이 작성된 foo 및 foo2의 두 클래스가 있다고 가정 해 보겠습니다.
foo.h :
#ifndef __InheritanceTest__foo__
#define __InheritanceTest__foo__
#include <stdio.h>
class foo
{
public:
foo();
int getSize();
protected:
int size;
};
#endif
foo.cpp :
#include "foo.h"
foo::foo()
{
size = 23;
}
int foo::getSize()
{
return size;
}
foo2.h :
#ifndef __InheritanceTest__foo2__
#define __InheritanceTest__foo2__
#include <stdio.h>
#include "foo.h"
class foo2: foo
{
public:
foo2();
};
#endif
foo2.cpp :
#include "foo2.h"
foo2::foo2()
{
size = size *2;
}
이것은 내 메인입니다.
#include <iostream>
#include "foo.h"
#include "foo2.h"
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
foo2 f2;
int i = f2.getSize();
std::cout << i << "\n";
return 0;
}
두 가지 오류가 발생합니다.
'getSize'는 foo의 비공개 멤버입니다.
과
foo2를 전용 기본 클래스 foo로 캐스팅 할 수 없습니다.
클래스를 통한 상속은 기본적으로 비공개입니다. 즉, 상속 된 데이터 멤버와 멤버 함수는 파생 클래스에서 전용이며 자신이나 클래스의 친구를 통해서만 액세스 할 수 있습니다.
키워드 public
를 사용하여 공용 상속을 지정 하십시오 .
class foo2 : public foo
{ ... }
struct
이는 데이터 멤버 및 멤버 함수에 대한 공용 상속 및 공용 액세스 권한 이있는의와는 다릅니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다