C++类中的全局函数举例
时间: 2023-07-11 11:10:32 浏览: 182
以下是一个示例,展示了如何在C++类中定义和使用全局函数:
```c++
#include <iostream>
using namespace std;
class MyClass {
private:
int x;
public:
MyClass(int a) {
x = a;
}
int getX() {
return x;
}
friend void printX(MyClass obj);
};
void printX(MyClass obj) {
cout << "x value is: " << obj.x << endl;
}
int main() {
MyClass obj(5);
printX(obj);
return 0;
}
```
在上面的示例中,我们定义了一个 MyClass 类,该类包含一个私有变量 x 和一个公共成员函数 getX()。我们还定义了一个全局函数 printX(),并将其声明为 MyClass 类的友元函数。在 main() 函数中,我们创建了 MyClass 对象 obj 并调用了 printX() 函数,该函数可以访问 MyClass 类的私有变量 x。
输出结果为:
```
x value is: 5
```
注意,全局函数可以访问类的私有成员,但是这并不意味着应该经常使用友元函数。友元函数打破了封装性原则,因此应该仅在必要的情况下使用。
相关问题
c/c++中extern应用举例
当在一个源文件中使用 extern 关键字声明一个变量或函数时,它表示该变量或函数在其他源文件中定义。举个例子,如果在一个源文件中声明了一个全局变量,但是在另一个源文件中定义了该变量,那么在第一个源文件中使用该变量时,就需要使用 extern 关键字来声明该变量。例如:
// file1.c
extern int global_var;
int main() {
global_var = 10;
return 0;
}
// file2.c
int global_var;
在上面的例子中,file1.c 中使用了 extern 关键字来声明 global_var 变量,因为它在 file2.c 中定义。
c++seekg和seekp使用举例
在C++中,`std::fstream` 类(文件流)提供了一个成员函数 `seekg()` 和 `seekp()`,用于改变文件指针的位置,以便读取或写入文件的不同位置。这两个函数分别对应于文件的“全局”(global,从头开始计算)和“当前位置”(position,基于当前读写位置)。
1. **seekg()** 示例:
这个函数用于移动到文件的特定字节位置,通常配合 `std::ios_base::pos_type`(一个整数类型,表示偏移量)参数使用:
```cpp
std::ifstream file("example.txt");
if (file.is_open()) {
file.seekg(10); // 移动到第10个字节的位置,从开头算起
char ch;
file.get(ch); // 现在可以读取这个位置的字符
}
```
2. **seekp()** 示例:
与 `seekg()` 相似,`seekp()` 用于定位到文件的特定位置,但它是基于当前读写位置的:
```cpp
std::ofstream out("example.txt", std::ios::app);
out << "Original content.\n";
out.flush(); // 确保内容已写入
out.seekp(-8, std::ios_base::end); // 移动到倒数第八个字节处准备写入
out.put('X'); // 替换原来的位置,现在out指向的位置是 'X'
```
阅读全文