내 첫 게시물은 여기에 :)Friend 함수는 파생 클래스의 정적 멤버를 호출합니다. 예상 출력을 얻지 못했습니다
다음 C++ 코드에 문제가 있습니다. 내가 ABC 클래스 A를 가지고 있고, 두 개의 파생 클래스 B와 C는 그들 모두 정적 멤버는 ID라는이 :
using std::cout;
class A
{
private:
friend int bar(A& a);
static const int id = 1;
virtual void foo() = 0;
};
class B : public A
{
private :
friend int bar(A& a);
static const int id = 2;
void foo() { /*Do something*/ }
};
class C : public A
{
private:
friend int bar(A& a);
static const int id = 3;
void foo() { /*Do something*/ }
};
int bar(A& a)
{
return a.id;
}
int main()
{
B b;
C c;
cout << bar(b) << "\n";
cout << bar(c) << "\n";
return 0;
}
내가 2와 3를 인쇄이 코드를 기다리고 있었다 - 오히려 1 밖으로 인쇄하고 1 (bar()는 항상 A :: id를 사용합니다). 내가 도대체 뭘 잘못하고있는 겁니까? 어떤 아이디어?
아래의 설명에 따르면, 사용중인 최종 코드입니다. 그것은 작동하지만,
#include <iostream>
using std::cout;
class A
{
private:
virtual void foo() = 0;
};
class B : public A
{
private:
template <typename T>
friend int bar(T& t);
static const int id = 2;
void foo() { /*do something*/ }
};
class C : public A
{
private:
template <typename T>
friend int bar(T& t);
static const int id = 3;
void foo() { /*do something*/ }
};
template <typename T>
int bar(T& t)
{
return t.id;
}
int main()
{
B b;
C c;
cout << bar(b) << "\n";
cout << bar(c) << "\n";
return 0;
}
'bar'는 친구로 선언하지만이 코드에는 의미가 없습니다. –
@Jesse 내 실제 코드 ID는 private입니다. 출력에 아무런 차이가 없습니다. 위의 게시물을 변경했습니다 :) – ahmadh
오른쪽, 친구 함수는 대답의 제안과 같이 A, B 및 C의 멤버로 멤버를 만들어야 원하는 것을 달성하기 위해 클래스의 비공개 및 보호 된 멤버에 액세스 할 수있는 권한을 부여합니다. –