从另一个类 C++ 访问受保护的函数
accessing protected function from another class c++
我正在尝试访问类测试中的受保护函数,但我不知道该怎么做。
好的,我承认我问这个的一个事实是,因为我的家庭作业中有一部分我的任务是将一个功能作为受保护的:并访问它而不是将其公开:
我不确定我应该怎么做。
下面的代码是我通常访问函数的方式,但当然,它不起作用,因为它受到保护:
测试.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;
}
主.cpp
#include Test.h
#include<iostream>
int main() {
Test test;
test.sampleOutputMethod();
}
基本上有两种访问受保护成员的方法:1) 创建一个继承自类 Test 的类:
class Test2 : public Test {
public:
void sampleOutputMethod() { ::sampleOutputMethod; }
}
2)创建另一个类,并修改类Test以使另一个类成为你的测试类的朋友:
class Test; // Forward declaration of Test
class Test2 {
public:
void output( Test& foo ) { foo.sampleOutputMethod(); }
}
class Test {
protected:
void sampleOutputMethod();
}
如果您尝试从不属于层次结构的类访问受保护的函数,则受保护的函数与私有函数一样好。您要么必须使尝试访问它的类成为 Test 的子类,要么必须将其声明为友元类。我敢打赌你需要第一个选项。
您也可以委派函数。创建一个调用受保护函数的公共函数。
这可以通过派生 Test 或创建另一个类 Test2 来实现,并将 Test 声明为 Test2 的好友并让 Test2 包含 Test 的实例。
查看家庭作业的所有说明会有所帮助。
如果允许修改类 Test,可以添加一个调用 "sampleOutputMethod" 的公共函数,也可以使用此技巧返回 "sampleOutputMethod" 的函数指针 https://stackoverflow.com/a/6538304/1784418
相关文章:
- 继承和友元函数,从基类访问受保护的成员
- C++:为什么无法在派生类中访问受保护的构造函数?
- 在父类中公开受保护的构造函数
- 如何实现返回受保护结构的私有函数
- 为什么继承的受保护构造函数不能公开?
- 基类中受保护的纯虚函数如何被基类的友元类使用?
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 在 lambda 函数 g++-4.8 中调用继承的受保护子类型
- 在派生类中具有相同签名但继承为受保护的函数
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- 将派生类构造函数参数传递给受保护的成员
- 在派生类的构造函数初始化中无法访问受保护的函数
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用
- 无法访问派生类函数内的基类的受保护数据成员
- C++,如何创建线程限制/受保护的变量和函数
- 带unique_ptr的受保护析构函数
- 尝试在 C++ 中的子类中调用父类的受保护函数
- 调用基类的受保护函数时出错