主函数中如何调用上述友元函数
时间: 2024-03-10 14:50:27 浏览: 54
对于上述的使用非成员函数实现重载运算符乘法的例子,可以在主函数中以如下方式调用:
```c++
MyClass a, b, c;
// 假设 MyClass 类已经定义并实现了 operator* 运算符重载
c = a * b; // 调用 operator* 运算符重载
```
在这个例子中,我们创建了三个 MyClass 类的对象 a、b、c,并且通过重载运算符乘法实现了 c = a * b 的运算。由于 operator* 是一个非成员函数并且被声明为 MyClass 的友元函数,所以可以直接通过 a * b 来调用该函数。
需要注意的是,这里的 operator* 函数可以在 MyClass 类的定义内或外进行声明和实现。如果在类的定义内声明并实现该函数,则不需要加上 friend 关键字;如果在类的定义外进行声明和实现,则需要加上 friend 关键字并将其声明为 MyClass 类的友元函数。
相关问题
任务描述 本关任务:有如下程序: , 将上述程序中的dispaly函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用dispaly函数,dispaly函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。 相关知识 为了完成本关任务,你需要掌握:友元函数。 测试说明 平台会对你编写的代码进行测试: 测试输入:2004 12 25 10 13 56 预期输出: 12/25/2004 10:13:56
以下是代码示例:
```cpp
#include <iostream>
using namespace std;
class Date; // 提前声明,用于函数声明
class Time {
private:
int hour, minute, second;
public:
Time(int h, int m, int s): hour(h), minute(m), second(s) {}
friend void display(Time t, Date d); // 声明友元函数
};
class Date {
private:
int year, month, day;
public:
Date(int y, int m, int d): year(y), month(m), day(d) {}
friend void display(Time t, Date d); // 声明友元函数
};
void display(Time t, Date d) { // 类外的普通函数
cout << d.month << "/" << d.day << "/" << d.year << " ";
cout << t.hour << ":" << t.minute << ":" << t.second << endl;
}
int main() {
int y, m, d, h, mi, s;
cin >> y >> m >> d >> h >> mi >> s;
Time t(h, mi, s);
Date dObj(y, m, d);
display(t, dObj); // 调用dispaly函数
return 0;
}
```
在上述代码中,我们将dispaly函数从Time类中移除,并将其作为类外的普通函数。然后,在Time和Date类中都将display声明为友元函数,这样dispaly函数就能够访问Time和Date类的私有数据。最后,在主函数中调用dispaly函数,参数分别为Time和Date类的对象。运行程序后,输出年、月、日和时、分、秒。
用c++编写:设计一个日期类和时间类,编写display函数用于显示日期和时间。要求:display函数作为类外的普通函数,分别在Time和Date类中将display声明为友元函数。在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。
好的,下面是代码实现:
```
#include <iostream>
using namespace std;
class Time; // 前置声明
class Date {
friend void display(Date& date, Time& time); // 声明友元函数
private:
int year, month, day;
public:
Date(int y, int m, int d) {
year = y;
month = m;
day = d;
}
};
class Time {
friend void display(Date& date, Time& time); // 声明友元函数
private:
int hour, minute, second;
public:
Time(int h, int m, int s) {
hour = h;
minute = m;
second = s;
}
};
void display(Date& date, Time& time) { // 定义友元函数
cout << "日期:" << date.year << "-" << date.month << "-" << date.day << endl;
cout << "时间:" << time.hour << ":" << time.minute << ":" << time.second << endl;
}
int main() {
Date date(2021, 10, 1);
Time time(10, 30, 0);
display(date, time);
return 0;
}
```
在上述代码中,我们定义了一个`Date`类和一个`Time`类,分别表示日期和时间,每个类中都声明了一个友元函数`display`,用于输出私有数据。在主函数中,我们创建了一个`Date`对象和一个`Time`对象,并将它们作为参数传递给`display`函数,从而输出日期和时间。