如果我有两个课程,例如像
那样class A {
...
protected:
B* test;
aFunction();
};
class B {
...
protected:
A* test1;
public:
bFunction();
};
我可以在B类的bFunction()
内进行此操作:
bFunction(){
test1->aFunction();
}
基本上,我可以从不是从该函数派生的类中调用某个类的受保护函数吗?
答案 0 :(得分:4)
protected
的“点”是只有从基类派生的类才能调用这些函数。
如果您有充分的理由这样做,那么请将课程设为friend
,例如在friend class B;
内添加class A
。
答案 1 :(得分:2)
建议避免这种无关紧要的相互依赖。使用友元函数的必要性通常表明架构不好。
答案 2 :(得分:1)
无法访问类的私有成员和受保护成员 在他们被宣布的同一个班级之外。但是,这个规则 不影响朋友。
当其他类是“朋友”时,您可以从其他类调用protected和privat方法:
在你的情况下:
Class A {
...
protected:
B* test;
aFunction();
friend class B;
}
通常这被认为是不好的做法,但对于紧密耦合的类,这是可以的。