如果函数fun被声明为类A的友元函数,则fun的形参类型不能是A吗
时间: 2024-04-02 08:36:29 浏览: 114
是的,如果函数`fun`被声明为类`A`的友元函数,那么`fun`的形参类型不能是`A`本身。因为类`A`的友元函数可以访问类`A`的私有成员,如果将形参类型定义为`A`,那么在调用`fun`的时候,就无法访问到类`A`的私有成员了。所以,如果需要在类的友元函数中访问类的私有成员,建议将形参类型定义为其他类型。
相关问题
本题用于验证继承的有关规则。请在//start和//end之 间编写代码,实现以下要求: (1)编写名为CFT的类,数据成员仅有一个int型的整数,名为data; 函数成员包括:①构造函数。用形参得到的整数对数据成员进行初始化。 ②show虚函数,无参,无返回值。功能是以“show=???” 的形式显示数据成员的值。 ③disp函数, 无参,无返回值。功能是以“disp=???”的形式显示数据成员的值。 (2)编写名为CSN的类,以CFT为基类,新增一个int型的数据成员,名字仍然是data;函数 成员包括: ①构造函数。用形参得到的两个整数对数据成员进行初始化,前一形参用于新增的数据成 员,后一形参用于基类的数据成员。 ②show虚函数,无参,无返回值。功能是以“show=(???,???)”的形式显示数据成员的 值,基类的数据成员在前,CSN新增的数据成员在后。 ③disp函数,无参,无返回值。功能是以“disp=(3?????)”的形式显示数据成员的值,基 类的数据成员在前,CSN新增的数据成员在后。 ④把“void fun()” 设定为本类的友元函数。 其中②和③需要实现对基类同名函数的覆盖,fun是全局函数。
//start
#include <iostream>
using namespace std;
class CFT {
protected:
int data;
public:
CFT(int d): data(d) {}
virtual void show() {
cout << "show=" << data << endl;
}
void disp() {
cout << "disp=" << 3 * data << endl;
}
};
class CSN : public CFT {
private:
int data;
public:
CSN(int d1, int d2) : CFT(d2), data(d1) {}
void show() {
cout << "show=(" << CFT::data << "," << data << ")" << endl;
}
void disp() {
cout << "disp=(" << CFT::data << data << ")" << endl;
}
friend void fun();
};
void fun() {
CSN csn(4, 5);
csn.show();
}
int main() {
fun();
return 0;
}
//end
阅读全文