写一个程序:有私有成员、有成员函数和友元函数的定义,主函数能创建对象并调用
时间: 2023-03-03 17:03:24 浏览: 70
答:示例代码:
class Example {
private: // 私有成员
int a;
public: // 公有成员函数
Example(int x) { a = x; }
int getA() { return a; }
friend void setA(Example &e, int val); // 友元函数声明
};
// 友元函数定义
void setA(Example &e, int val) { e.a = val; }
// 主函数
int main()
{
Example obj(10);
cout << "a before setting value: " << obj.getA() << endl;
setA(obj, 20);
cout << "a after setting value: " << obj.getA() << endl;
return 0;
}
相关问题
定义一个圆类,计算圆的面积和周长。要求:分别用成员函数和友元函数来求圆的面积和周长。
以下是圆类的代码实现:
```cpp
#include <iostream>
using namespace std;
class Circle {
private:
double radius; // 圆的半径
public:
Circle(double r) {
radius = r;
}
double getRadius() {
return radius;
}
double getArea() {
return 3.14 * radius * radius;
}
double getPerimeter() {
return 2 * 3.14 * radius;
}
};
// 友元函数
void printCircle(Circle c) {
cout << "半径为 " << c.getRadius() << " 的圆的面积为:" << c.getArea() << endl;
cout << "半径为 " << c.getRadius() << " 的圆的周长为:" << c.getPerimeter() << endl;
}
int main() {
Circle c(5);
printCircle(c);
return 0;
}
```
我们定义了一个 Circle 类,其中包含一个私有数据成员 radius,表示圆的半径。类中还包含了三个公有成员函数:
- 构造函数:用于初始化圆的半径。
- getArea():用于计算圆的面积。
- getPerimeter():用于计算圆的周长。
我们还定义了一个友元函数 printCircle(),该函数可以访问 Circle 类的私有成员 radius,用于输出圆的面积和周长。
在主函数中,我们创建了一个 Circle 对象 c,然后调用 printCircle() 函数来输出圆的面积和周长。
c++成员函数作为友元与普通函数作为友元,两者之间有什么不同
C++成员函数作为友元和普通函数作为友元之间的主要区别在于它们可以访问的类成员不同。
成员函数作为友元时,它可以访问该类的所有成员,包括私有成员。因此,成员函数作为友元更加灵活,可以访问更多的类成员。
而普通函数作为友元时,它只能访问该类的公有成员和保护成员,不能访问私有成员。因此,普通函数作为友元更加受限制,只能访问有限的类成员。
此外,成员函数作为友元时需要通过对象来调用,而普通函数作为友元时不需要。