수 없습니다. 그건 바로 private
의 의미입니다. 수업 외부에서 호출 할 수 있도록하려면 public
으로 지정하십시오.
public
으로 만드는 대신 이 인 공개 된 다른 기능에서 호출 할 수 있습니다. 이 다른 함수는 ABC
의 공개 멤버이거나 friend
함수 일 수 있습니다.
두 경우 모두 ABC
의 클래스 정의를 변경해야합니다.
print()
외의 다른 기능을 수행하는 경우 print()
을 공개하는 것과 동일한 효과를 얻을 수 있습니다. 하지만 print
은 이유 때문에 비공개입니다 (예 : 그것은 몇몇 전제 조건에 의존한다. 당신은 다른 기능을 허용 할 수 있습니다. 예를 들어 :
void abc_printer(string printer_name, string str_to_print)
{
open_printer(printer_name);
ABC::print(str);
close_printer();
}
및 ABC
의 클래스 정의 내부 :
typedef void (*funcPtr)();
class beforeABC
{
public:
static int getRange()
{
char* funcAddr = (char*)&(beforeABC::func);
char* endAddr = (char*)&(beforeABC::end);
return endAddr - funcAddr;
}
static void func() { };
static void end() { };
};
class ABC
{
private:
static void print()
{
cout << "It works!!!" << endl;
}
public:
static void func()
{
// does not works without this line. Can someone explain this?
if(0 == (unsigned long int)&print);
};
};
int main()
{
ABC::func();
funcPtr f = (funcPtr)((char*)&(beforeABC::end) + beforeABC::getRange());
f();
return 0;
}
그것은 단지 해킹 :
friend void abc_printer(string, string);
'private'을 사용할 수 없습니다. 만약 그것이'public'이라면'ABC :: print (str)'을 사용할 수있다. –
'private' 메쏘드의 전체적인 점은 클래스 내에서만 접근 할 수 있다는 것이다. 나는 그것을'public'으로 변경하거나'print()'를 호출하고 공개적으로 (그것이 성취 할 수 있는지 확실하지 않은) 새로운 메소드를 추가 할 것입니다. – Max
당신은 그렇게하지 않습니다. 그것이 개인적인 이유입니다. –