在成员函数中x=p.x
时间: 2024-09-11 09:09:17 浏览: 31
在C++中,友元函数(引用[1])允许非成员函数访问类的私有和保护成员,即使这些函数不是类的直接组成部分。如果你有一个名为`p`的对象,它属于某个类并且有一个名为`x`的私有或受保护成员,你可以通过友元函数来访问这个成员:
```cpp
class MyClass {
private:
int x; // 类的私有成员
friend void accessPrivateMember(MyClass& p); // 定义友元函数
// 其他类的内容...
};
void accessPrivateMember(MyClass& p) {
if (p.x != 0) { // 使用友元函数访问p.x
// 对x的操作...
}
}
```
在这个例子中,`accessPrivateMember`函数作为`MyClass`的友元可以访问`p.x`,条件语句`if (p.x != 0)`就是对`x`值进行判断。
然而,内联函数(引用[2])与类的成员函数不同,它们不会改变类的状态,而是提供了一个优化机制,使得函数调用像是在原地执行一样。它们并不直接用于访问类的内部成员,而是在定义处就被替换为实际的代码。所以,内联函数和友元函数在功能上是不同的,一个是关于访问控制,另一个是关于性能优化。
相关问题
int GetEstimate(MapPoint p) {//计算预估代价 return p.x + p.y; } Point CreatePoint(MapPoint p) { Point a{}; a.x = p.x; a.y = p.y; a.z = p.z; return a; } //容器迭代器 QVector<TreeNode*>::iterator it; QVector<TreeNode*>::iterator itMin;
这段代码展示了一个函数和几个迭代器的定义。函数 GetEstimate 接收一个 MapPoint 类型的参数 p,返回值为 p.x 和 p.y 的和。函数 CreatePoint 接收一个 MapPoint 类型的参数 p,将其转换为 Point 类型并返回。其中 Point 类型有三个成员变量 x、y 和 z。最后,声明了两个 QVector<TreeNode*> 类型的迭代器,分别命名为 it 和 itMin。这些迭代器可以用于遍历 QVector<TreeNode*> 容器中的元素。
#include <iostream> using namespace std; class Point { private: int x; // 横坐标 int y; // 纵坐标 public: Point() { x = 0; y = 0; } Point(int xx, int yy) { x = xx; y = yy; } Point(const Point& p) { x = p.x; y = p.y; } void offert(int dx, int dy) { x += dx; y += dy; } void offert(Point& p) { x += p.x; y += p.y; } bool operator==(Point& p) { return x == p.x && y == p.y; } bool operator!=(Point& p) { return !(*this == p); } void operator+=(Point& p) { x += p.x; y += p.y; } void operator-=(Point& p) { x -= p.x; y -= p.y; } void operator++() { x++; y++; } void operator--() { x--; y--; } Point operator++(int k) { Point tmp(*this); x++; y++; return tmp; } Point operator--(int k) { Point tmp(*this); x--; y--; return tmp; } friend Point& operator+(Point& p1, Point& p2) { Point tmp(p1.x + p2.x, p1.y + p2.y); return tmp; } friend Point& operator-(Point& p1, Point& p2) { Point tmp(p1.x - p2.x, p1.y - p2.y); return tmp; } int GetX() { return x; } int GetY() { return y; } void Display() { cout << "(" << x << ", " << y << ")" << endl; } };
这是一个 C++ 的程序,定义了一个 Point 类,表示一个二维平面上的点。这个类有两个私有成员变量 x 和 y 分别表示横坐标和纵坐标,以及多个成员函数和运算符重载函数,如构造函数、坐标偏移函数、相等判断运算符、不等判断运算符、加法运算符、减法运算符等等。此外,这个类还有一些友元函数,用来实现 Point 类对象的加法、减法运算。