MST

星途 面试题库

面试题:C++ 类外访问非公有成员的常规方法

在C++中,通常情况下类的非公有成员不能在类外直接访问。请简述一种合法的在类外访问非公有成员的途径,并给出一个简单示例代码。
28.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 途径
    • 可以通过友元函数或友元类来在类外访问非公有成员。友元函数是在类定义中声明的函数,它不是类的成员函数,但能访问类的私有和保护成员。友元类也类似,友元类的所有成员函数都可以访问另一个类的私有和保护成员。
  2. 示例代码(友元函数)
#include <iostream>

class MyClass {
private:
    int privateData;
public:
    MyClass(int data) : privateData(data) {}
    // 声明友元函数
    friend void accessPrivate(MyClass& obj);
};

// 友元函数定义
void accessPrivate(MyClass& obj) {
    std::cout << "Accessing private data: " << obj.privateData << std::endl;
}

int main() {
    MyClass myObj(10);
    accessPrivate(myObj);
    return 0;
}
  1. 示例代码(友元类)
#include <iostream>

class FriendClass;

class MyClass {
private:
    int privateData;
public:
    MyClass(int data) : privateData(data) {}
    // 声明FriendClass为友元类
    friend class FriendClass;
};

class FriendClass {
public:
    void accessPrivate(MyClass& obj) {
        std::cout << "Accessing private data from friend class: " << obj.privateData << std::endl;
    }
};

int main() {
    MyClass myObj(20);
    FriendClass friendObj;
    friendObj.accessPrivate(myObj);
    return 0;
}