Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模拟;这";友元函数c+中的指针概念+; 我有一个类a的友元函数'fun()'。fun引用类型a的对象。假设objname是'obj' 在fun()friend函数中,为了访问类A的元素,需要obj.member。因为有大量的成员,我想跳过这个'obj.member',说'member'应该指传递的对象_C++ - Fatal编程技术网

C++ 模拟;这";友元函数c+中的指针概念+; 我有一个类a的友元函数'fun()'。fun引用类型a的对象。假设objname是'obj' 在fun()friend函数中,为了访问类A的元素,需要obj.member。因为有大量的成员,我想跳过这个'obj.member',说'member'应该指传递的对象

C++ 模拟;这";友元函数c+中的指针概念+; 我有一个类a的友元函数'fun()'。fun引用类型a的对象。假设objname是'obj' 在fun()friend函数中,为了访问类A的元素,需要obj.member。因为有大量的成员,我想跳过这个'obj.member',说'member'应该指传递的对象,c++,C++,有没有办法做到这一点?在函数顶部声明一些东西,因为我不需要一次又一次地说“obj.something”,只有“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),

有没有办法做到这一点?在函数顶部声明一些东西,因为我不需要一次又一次地说“obj.something”,只有“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;
}
#包括
使用名称空间std;
甲级{
私人:
int x;
字符c;
字符串s;
公众:
A(int x,char c,string s):x(x),c(c),s(s){};
朋友虚无乐趣(A&obj);
};
虚无乐趣(A&obj){
//这里有什么东西我可以用在上面,这样我就不需要引用obj.x或obj.c或obj.s…等等?
//像“使用”之类的东西…哪一个能分辨出哪一个?
//通过这种方式,我想模拟隐藏的指针概念。
int x=对象x;
char c=对象c;
字符串s=对象s;
//……类似地访问obj的其他元素

cout简单的回答是,你不能这样做——或者说,似乎对这一点有用的东西真的是坏主意

在friend(或任何非成员)函数中,对对象的所有引用(访问数据成员、调用非静态成员函数)都需要使用
obj.
语法

事实上,你的问题反映了一种虚假的经济感——有点像罗马大部分地区被烧毁时尼禄在屋顶上摆弄。在一些语句上额外键入
obj.
是无关紧要的,而减少键入负担的技术会使你的代码变得不那么清晰、更难理解,并且让未来的开发人员更困惑-很可能包括你自己

您可以尝试使用宏执行某些操作

 #define X obj.

 char c = X c;
<>但这并不能节省打字,而且会给那些代码低劣的C++程序员(包括将来的你自己)带来困惑。所以这不是个好主意。

你也可以尝试做一些类似的事情

 void fun(A &obj)
 {
      obj.fun();    // call a member function that does everything needed
 }

但这在实践中是毫无意义的-仍然需要定义成员函数,如果您有成员函数,则不需要非成员版本。

谢谢!我的基本问题是有两个类A和B,它们都是从某个库基类单独继承的。A和B有一个同名函数完全相同的代码。我想以某种方式为a和B编写一个函数,我试图通过friend函数(或模板friend)和传递对象类型a或B来实现。但在这种情况下,我必须在这么多地方执行“obj”。你能想到什么方法吗?重构。将成员函数放在关注的位置(以及它需要访问的任何数据成员,在这两个类中可能也是相同的),并从中派生a和B。我尝试访问的数据成员属于库基类(没有编辑库类的权限).因此,根据您的回答,作为库基类的数据,我需要创建一个本地基类,并从库基类派生它。然后从本地基类派生a和B。我说的对吗?“因为有大量成员,我想跳过这个‘obj.member’并说‘member’”有多少成员在类型中有什么关系?当它去找出代码>成员< /C>是什么时候,它不会减慢C++的速度。