在C ++中为成员对象调用受保护的方法

时间:2013-09-29 17:01:10

标签: c++ protected

如果我有两个课程,例如像

那样
class A {
    ...
    protected:
        B* test;
        aFunction();
};

class B {
    ...
    protected:
        A* test1;

    public:
        bFunction();
};

我可以在B类的bFunction()内进行此操作:

bFunction(){
    test1->aFunction();
}

基本上,我可以从不是从该函数派生的类中调用某个类的受保护函数吗?

3 个答案:

答案 0 :(得分:4)

protected的“点”是只有从基类派生的类才能调用这些函数。

如果您有充分的理由这样做,那么请将课程设为friend,例如在friend class B;内添加class A

答案 1 :(得分:2)

建议避免这种无关紧要的相互依赖。使用友元函数的必要性通常表明架构不好。

答案 2 :(得分:1)

来自cplusplus.com

  

无法访问类的私有成员和受保护成员   在他们被宣布的同一个班级之外。但是,这个规则   不影响朋友。

当其他类是“朋友”时,您可以从其他类调用protected和privat方法:

在你的情况下:

Class A {
    ...
    protected:
        B* test;
        aFunction();
    friend class B;
}

通常这被认为是不好的做法,但对于紧密耦合的类,这是可以的。