繁体   English   中英

C ++将类成员项传递给成员函数

[英]C++ passing in a class member item to a member function

不必要地将成员项传递给成员函数有什么后果(不是劣质代码):

struct foobar
{
  char * arr; //properly initialized to SIZE at some point
}

class foo
{
  public:
    void bar(foobar&);
    foobar barfoo;
};


void foo::bar(foobar& barf)
{
    cin.get(barf.arr, SIZE, '\n');
    cin.ignore(100, '\n');
}

有什么理由不完全消除bar的参数,而直接调用barfoo吗? 不这样做的后果是什么?

这取决于。

如果只有在将this->barfoo作为参数传递时才调用foo::bar上下文,那么这是很愚蠢的(尽管不是很有害)。

但是,在this->barfoo不是唯一可以传递给成员函数的参数的情况下,显然可以了。

结果就是不能将其他foobar实例传递给同一方法。

问题不在于是否有时将成员发送给方法,而在于调用者是否希望能够指定参数。

由于这是一个公共方法,因此可能有此类以外的调用者。

没有理由不消除它。 至少在将其传递给函数时,您将进行额外的取消引用。

但是,如果somethign从类外部使用bar(foobar&),则可以重载它并执行以下操作:

class foo {
public:
    void bar(); /* Uses default barfoo */
    void bar(foobar&);
    foobar barfoo; 
private:
};

viod foo:bar() {
     bar(barfoo);
}

void foo::bar(foobar& barf) {
    cin.get(barf.arr, SIZE, '\n');
    cin.ignore(100, '\n'); 
} 

传递参数会产生一些开销,因此,如果您永远不会与另一个成员调用该方法,则可以摆脱该参数。 如果将来可能需要执行以下操作:

class foo 
{ 
  public: 
    void bar(foobar&); 

  private/*(or still public)*/: 
    foobar barfoo;
    foobar barfoo2;

    void some_other_method() {
      //do stuff
      bar(barfoo);
      bar(barfoo2);
}; 

那我就别管它了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM