MST

星途 面试题库

面试题:C++结构体中成员函数与普通函数的区别

在C++结构体中可以定义成员函数,阐述结构体中成员函数与普通函数在访问权限、作用域以及调用方式上有哪些区别。
15.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

访问权限

  • 结构体成员函数:可以直接访问结构体的所有成员,包括私有和保护成员(前提是在结构体定义内部或有相应权限)。这是因为成员函数是结构体的一部分,与结构体的成员处于同一访问域。例如:
struct MyStruct {
    int privateVar;
private:
    int privateVar2;
public:
    void setVars(int a, int b) {
        privateVar = a;
        privateVar2 = b;
    }
};
  • 普通函数:默认情况下不能直接访问结构体的私有和保护成员,只能访问结构体的公有成员。若要访问私有成员,需要通过结构体的公有接口(如成员函数)。例如:
struct MyStruct {
    int data;
private:
    int privateData;
};
void ordinaryFunction(MyStruct obj) {
    // 下面这行代码会报错,因为privateData是私有的
    // obj.privateData = 10; 
    obj.data = 10;
}

作用域

  • 结构体成员函数:其作用域局限于结构体内部。函数名在结构体的作用域内,在外部调用时需要通过结构体对象或指针来访问。例如,对于上述MyStruct结构体,调用setVars函数需要这样:
MyStruct s;
s.setVars(1, 2);
  • 普通函数:作用域在其定义所在的命名空间内(若未在特定命名空间定义,则在全局命名空间)。只要在其作用域可见,就可以直接调用,不需要通过特定结构体对象。例如:
void ordinaryFunction() {
    // 函数体
}
ordinaryFunction();

调用方式

  • 结构体成员函数:通过结构体对象或指针来调用。使用对象调用时,通过.运算符;使用指针调用时,通过->运算符。例如:
MyStruct s;
MyStruct* ptr = &s;
s.setVars(1, 2);
ptr->setVars(3, 4);
  • 普通函数:直接使用函数名进行调用,在函数可见的作用域内即可。例如:
void ordinaryFunction() {
    // 函数体
}
ordinaryFunction();