MST

星途 面试题库

面试题:C++中如何在类外访问私有成员

在C++中,类的私有成员默认不能在类外部直接访问。请描述一种合法的方式,实现在类外访问类的私有成员,并举例说明。
11.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

在C++中,可以通过友元函数或友元类来实现在类外访问类的私有成员。

友元函数

  1. 定义:友元函数是在类定义中使用 friend 关键字声明的非成员函数,它可以访问该类的私有和保护成员。
  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 obj(42);
    accessPrivate(obj);
    return 0;
}

友元类

  1. 定义:如果一个类A被声明为另一个类B的友元类,那么类A的所有成员函数都可以访问类B的私有和保护成员。
  2. 示例代码
#include <iostream>

class ClassB;

class ClassA {
public:
    void accessPrivate(ClassB& obj);
};

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

void ClassA::accessPrivate(ClassB& obj) {
    std::cout << "Accessing private data of ClassB: " << obj.privateData << std::endl;
}

int main() {
    ClassB obj(100);
    ClassA a;
    a.accessPrivate(obj);
    return 0;
}