相关疑难解决方法(0)

你会在哪里使用友元函数而不是静态成员函数?

当我们希望它访问该类的私有成员时,我们将非成员函数作为类的朋友.这赋予它与静态成员函数相同的访问权限.两种选择都会为您提供一个与该类的任何实例无关的函数.

什么时候必须使用朋友功能?什么时候必须使用静态函数?如果两者都是解决问题的可行方案,那么我们如何权衡它们的适用性呢?是否有一个默认情况下应该首选?

例如,当实现一个工厂创建foo只有私有构造函数的类的实例时,工厂函数应该是foo(你会调用foo::create())的静态成员还是应该是友元函数(你会调用create_foo())?

c++ friend-function static-functions

61
推荐指数
6
解决办法
2万
查看次数

我应该在哪里实现这个"私人"帮助函数?

我的类定义分布在头文件和源文件中:

// T.hpp

class T {
   public:
      void foo();
};

// T.cpp

void T::foo() {

}
Run Code Online (Sandbox Code Playgroud)

如果T::foo需要使用一些T需要可见的辅助函数,以下哪种解决方案最好?

1.私人会员

// T.hpp

class T {
   public:
      void foo();
   private:
      void helper();
};

// T.cpp

void T::foo() {
    helper();
}

void T::helper() {
}
Run Code Online (Sandbox Code Playgroud)

2.仅在类定义的TU中可访问的自由函数

// T.hpp

class T {
   public:
      void foo();
};

// T.cpp

namespace {
    void helper() {}
}

void T::foo() {
    helper();
}
Run Code Online (Sandbox Code Playgroud)

有没有区别,除了前者我会在头文件中有更多的功能?

c++

11
推荐指数
2
解决办法
8397
查看次数

当函数应该改变对象的状态时,是去成员函数还是朋友函数?

在Bjarne Stroustrup撰写的The C++ Programming Language一书中,作者介绍了一个必须实现函数inv()的类Matrix.在第11.5.1节中,他谈到了这样做的两种可能性.一个是建立一个成员函数,另一个是使朋友函数inv().然后在第11.5.2节结束时,他谈到选择是否使用朋友或成员函数,他说:

如果inv()确实反转了Matrix m本身,而不是返回一个与m相反的新Matrix,那么它应该是一个成员.

为什么会这样?朋友函数不能改变Matrix的状态并返回对该矩阵的引用吗?是因为在调用函数时传递临时矩阵的可能性是什么?

c++ member-functions friend-function

6
推荐指数
1
解决办法
5608
查看次数

使用operator <<在向量中推送std :: strings

怎么可能用来 operator<<推进strings vector.我搜索了很多,但只找到流示例.

class CStringData
{

    vector< string > myData;
    // ...
    // inline  operator << ... ???
};
Run Code Online (Sandbox Code Playgroud)

我希望这可以用作一个简单的省略(类似void AddData(...))交换来获得健壮的参数.

CStringData abc;
abc << "Hello" << "World";
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

c++ string overloading stream operator-keyword

2
推荐指数
1
解决办法
1005
查看次数