从另一个类c ++访问受保护的函数

时间:2013-11-08 15:41:54

标签: c++

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

好的,我承认一个事实,我问这个是因为我的作业中有一部分我的任务是将一个功能作为受保护的:并且访问它而不是将其公开:

我不知道该怎么做。

以下代码是我通常访问函数的方式,但当然,它不起作用,因为它受到保护:

Test.h

#ifndef Test_Test_h
#define Test_Test_h

class Test {

protected:
      void sampleOutputMethod();
};

#endif

Test.cpp

 #include "Test.h"

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

的main.cpp

 #include Test.h
 #include<iostream>

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

基本上有两种访问受保护成员的方法: 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();
}

答案 3 :(得分:0)

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

返回“sampleOutputMethod”的函数指针