0

如果我有两个班级,例如这样

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

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

    public:
        bFunction();
};

我可以在 B 类里面这样做吗bFunction()

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

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

4

3 回答 3

4

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

如果您有充分的理由这样做,那么将类设为 a friend,例如添加friend class B;inside class A

于 2013-09-29T17:12:47.190 回答
2

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

于 2013-09-29T17:35:08.407 回答
1

来自cplusplus.com

不能从声明它们的同一类外部访问类的私有成员和受保护成员。但是,这个规则不影响朋友。

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

在你的情况下,这将是:

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

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

于 2013-09-29T17:11:52.717 回答