C++11新特性:拓展的friend语法

发布时间:2024年01月23日

在C++中,friend关键字用于声明一个函数或类是另一个类的友元(friend)。被声明为友元的函数或类可以访问包含它的类的私有成员。

使用friend关键字应当谨慎,因为它破坏了封装性,增加了类之间的耦合性。友元关系应该仅在确实需要访问私有成员的情况下使用。

友元函数:

class MyClass {
private:
    int privateMember;

public:
    MyClass() : privateMember(42) {}

    // 声明友元函数
    friend void friendFunction(const MyClass& obj);
};

// 友元函数的定义
void friendFunction(const MyClass& obj) {
    std::cout << "Friend Function accessing private member: " << obj.privateMember << std::endl;
}

int main() {
    MyClass myObject;
    
    // 友元函数可以访问私有成员
    friendFunction(myObject);

    return 0;
}

友元类:?

class AnotherClass {
public:
    void accessMyClassPrivateMember(const MyClass& obj) {
        std::cout << "AnotherClass accessing private member: " << obj.privateMember << std::endl;
    }
};

class MyClass {
private:
    int privateMember;

    // 声明友元类
    friend class AnotherClass;

public:
    MyClass() : privateMember(42) {}
};

int main() {
    MyClass myObject;
    AnotherClass anotherObject;
    
    // 友元类的成员函数可以访问私有成员
    anotherObject.accessMyClassPrivateMember(myObject);

    return 0;
}

?


?C++11对friend关键字进行改进:

?

在C++11中,声明一个类为另外一个类的友元时,不需要使用class关键字。

可以利用这个特性为类模板声明友元

这样可以在模板实例化的时候确定一个模板类是否有友元,以及谁是这个模板类的友元。

文章来源:https://blog.csdn.net/m0_52043808/article/details/135784554
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。