繁体   English   中英

声明一个派生类为好友以访问基类的私有成员

[英]Declaring one derived class a friend to access private member of base class

我具有以下继承结构:

template<unsigned int t>
class Base {
protected:
    int a;
};

template<unsigned int t>
class Derived1 : public Base {

};

template<unsigned int t>
class Derived2 : public Base {

};

我想要的是让Derived1构造函数将Derived2对象作为参数,然后访问基类中的受保护成员'a'。

我将以下行添加到基类:

template<unsigned int u> friend class Derived2;

这样看起来如下:

template<unsigned int t>
class Base {
protected:
    int a;

template<unsigned int u> friend class Derived2;
};

编译它时,出现错误C2248:“无法访问在Base类中声明的受保护成员”

如果要从Derived1构造函数访问受保护的成员,则需要成为Derived1而不是Derived2的朋友。

template<unsigned int t>
class Base {
protected:
    int a;

    template<unsigned int u> friend class Derived1; // here
};

template <unsigned int>
class Derived2;

template<unsigned int t>
class Derived1 : public Base<t> {
public:
    Derived1(Derived2<t>& d2) {
        cout << d2.a << endl;
    }
};

template<unsigned int t>
class Derived2 : public Base<t> {

};

int main() {
    Derived2<1> d2;
    Derived1<1> d1(d2);

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM