0

我正在尝试访问 Test 类中的受保护函数,但我不知道该怎么做。

好的,我承认一个事实,我之所以问这个问题是因为我的作业中有一部分是我的任务是将一个函数设置为受保护的:并访问它而不是将其公开:

我不知道我应该怎么做。

下面的代码是我通常如何访问一个函数,但当然,它不起作用,因为它受到保护:

测试.h

#ifndef Test_Test_h
#define Test_Test_h

class Test {

protected:
      void sampleOutputMethod();
};

#endif

测试.cpp

 #include "Test.h"

 void Test::sampleOutputMethod()  {
    std::cout << "this is a test output method" << std::endl;
 }

主文件

 #include Test.h
 #include<iostream>

 int main() {
    Test test;
    test.sampleOutputMethod();
 }
4

4 回答 4

1

如果您尝试从不属于您的层次结构的类访问受保护函数,则它与私有函数一样好。您要么必须使试图访问它的类成为 Test 的子类,要么必须将其声明为友元类。我打赌你需要第一个选项。

于 2013-11-08T15:45:00.387 回答
1

基本上有两种访问受保护成员的方法:1)创建一个继承自您的类 Test 的类:

class Test2 : public Test {
public:
    void sampleOutputMethod() { ::sampleOutputMethod; }
}

2)创建另一个类,并修改类 Test 以使另一个类成为您的 Test 类的朋友:

class Test;  // Forward declaration of Test
class Test2 {
public:
    void output( Test& foo ) { foo.sampleOutputMethod(); }
}

class Test {
protected:
    void sampleOutputMethod();
}
于 2013-11-08T16:00:08.153 回答
0

您也可以委托该功能。创建一个调用受保护函数的公共函数。

这可以通过派生 Test 或创建另一个类 Test2 并声明 Test 为 Test2 的朋友并让 Test2 包含 Test 的实例来完成。

看到你作业的所有说明会有所帮助。

于 2013-11-08T15:56:47.417 回答
0

如果您被允许修改类Test,您可以添加一个调用“sampleOutputMethod”的公共函数,或者您可以使用此技巧返回“sampleOutputMethod”的函数指针https://stackoverflow.com/a/6538304/1784418

于 2013-11-08T16:09:28.047 回答