有没有办法实现这一目标?说在函数顶部声明一些东西,因为我不需要一次又一次地说'obj.something',只有'某事'才行。
我的示例代码如下。
#include<iostream>
using namespace std;
class A{
private:
int x;
char c;
string s;
public:
A(int x, char c, string s) : x(x), c(c), s(s){};
friend void fun(A& obj);
};
void fun(A &obj){
//is there any thing here i can use on top so that i don't need to refer obj.x or obj.c or obj.s ...so on?
// anything like "using" ... which can tell which ?
//In that way i want to similulate hidden this pointer concept.
int x = obj.x;
char c = obj.c;
string s = obj.s;
//.....similarly accessing other elements of obj
cout<<x<<" "<<c<<" "<<s<<" "<<endl;
}
int main()
{
A obj(20,'Z',"friend");
fun(obj);
return 0;
}
答案 0 :(得分:0)
简短的回答是,你不能 - 或者那些似乎对此有用的事情是非常糟糕的想法。
在朋友(或任何非成员)函数中,对对象的所有引用(访问数据成员,调用非静态成员函数)都需要使用obj.<whatever>
语法。
真的,你的问题反映了一种虚假的经济感 - 有点像Nero在屋顶上摆弄,而罗马的大部分时间都被烧毁了。 obj.
在一些语句上的额外输入是微不足道的,减少打字负担的技术使您的代码不那么清晰,难以理解,并且对未来的开发人员更加困惑 - 包括更多可能是您自己。
您可以尝试使用宏
#define X obj.
char c = X c;
但这并不能节省打字,并且会给那些不起眼的C ++程序员(包括将来你自己)造成混淆的代码。所以这不是一个好主意。
您也可以尝试做类似
的事情 void fun(A &obj)
{
obj.fun(); // call a member function that does everything needed
}
但在实践中这有点毫无意义 - 仍然需要定义成员函数,如果有的话,几乎不需要非成员版本。