우원류 와 계승
C + + Primer 에는 다음 과 같은 설명 이 있 습 니 다. 친구 관 계 는 계승 할 수 없습니다.기본 클래스 의 우 원 은 파생 클래스 의 구성원 에 게 특별한 접근 권한 이 없습니다.기본 클래스 가 친구 관계 에 부여 되면 기본 클래스 만 특수 접근 권한 을 가지 고 있 으 며, 이 기본 클래스 의 파생 클래스 는 친구 관계 에 부여 되 는 클래스 에 접근 할 수 없습니다.
그러나 실천 을 통 해 알 수 있 듯 이 VS 컴 파일 러 는 상기 설명 을 설치 하지 않 고 아래 의 규칙 은 상기 설명 과 어 긋 나 지만 VS 컴 파일 러 의 처리 규칙 에 부합된다.
주: g + 컴 파일 러 를 통 해 검증 해 야 합 니 다.
1. 유원류 의 계승 문제
1.1 A 클래스 의 유원 B 의 파생 클래스 C 는 A 클래스 의 private 나 protect 멤버 변 수 를 방문 할 수 없습니다.하지만 B 가 제공 하 는 인 터 페 이 스 를 통 해 A 에 접근 할 수 있다.(쓸데없는 말 은 할 수 있다)
#include <iostream>
using namespace std;
class B;
class A
{
int a;
public:
A(int x=0) { a=x; }
friend class B;
};
class B
{
int b;
public:
void fun(A& ob){ cout << ob.a << endl;}
};
class C:public B
{
public:
//void fun2(A& ob){ cout <<ob.a <<endl;} // A,
};
void main()
{
A a(55);
C c;
c.fun(a); //C B B fun
}
1.2. Base 의 친구 들 은 Base 의 파생 클래스 인 Drived 를 통 해 Base 의 private, protect 멤버 변 수 를 방문 할 수 있 지만, Drived 의 private, protect 멤버 변 수 는 방문 할 수 없습니다.(이 점 은 'C + + primer' 에서 말 한 것 과 약간 충돌 하 는 것 같다)
개인 적 인 이해: Drived 의 대상 자체 에 Base 가 포함 되 어 있 고 Base 의 친구 인 Frnd 는 자연히 Base 의 부분 을 방문 할 수 있 습 니 다.
#include <iostream>
using namespace std;
class Base
{
int m_a;
public:
Base(int x=0){ m_a=x; }
friend class Frnd;
};
class Drived:public Base
{
private:
int m_c;
public:
Drived(int x):Base(x){m_c=x;}
};
class Frnd
{
public:
void fun(Base& ob) { cout <<ob.m_a << endl; }
void fun2(Drived& ob)
{
cout << ob.m_a<<endl;
//cout <<ob.m_c<<endl; //
}
};
int main()
{
Drived d(1);
Frnd f;
f.fun(d);
f.fun2(d);
system("pause");
return 0;
}
3. 우 원류 의 전달 문제
A 의 우 원 은 B, B 의 우 원 은 C, A 의 우 원 은 C?아니, 우 원 류 는 전달 성 이 없어.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.