访问权限
- 结构体成员函数:可以直接访问结构体的所有成员,包括私有和保护成员(前提是在结构体定义内部或有相应权限)。这是因为成员函数是结构体的一部分,与结构体的成员处于同一访问域。例如:
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();