“this”是否也适应函数指针?

时间:2013-06-03 16:44:28

标签: c++ oop pointers function-pointers

Java有一个允许方法通过" this()"来调用自身的构造。参考。 此公约的名称目前让我失望。 编辑:如下所述,称为构造函数委派。只会对构造函数起作用,而不是我误解的方法。

C ++是否具有所有的指针优点提供了对自身的引用,但不是具体本身?

例如,我有一个具有多个重载等功能。

void DoesSomething(){
    this->(default1, default2);
}

void DoesSomething(int myValue1){
    this->(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}

3 个答案:

答案 0 :(得分:2)

您需要明确指定函数名称:

void DoesSomething(){
    this->DoesSomething(default1, default2);
}

void DoesSomething(int myValue1){
    this->DoesSomething(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}

对于具有给定名称的上下文的其他函数,没有隐含的知识,就像您正在描述的那样。

请注意,在Java中,这仅适用于构造函数,并且称为Constructor Chaining。一般来说,它不会处理这种方法。

C ++ 11还增加了对同一概念的支持(如delegating constructors),尽管语法与Java,C#和其他使用此概念的语言不同。

对于构造函数,在C ++ 11中,您可以编写:

SomeType() : SomeType(42) {}

SomeType(int arg)
{
   // ...

答案 1 :(得分:1)

该代码需要修改为:

void DoesSomething(){
    this->DoesSomething(default1, default2);
}

void DoesSomething(int myValue1){
    this->DoesSomething(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}

void DoesSomething(){
    DoesSomething(default1, default2);
}

void DoesSomething(int myValue1){
    DoesSomething(myValue1, default2);
}

void DoesSomething(int myValue1, int myValue2){
    //Do stuff
}

因为代码中没有真正需要明确说明'this'。 c ++中存在的东西称为函数对象,如下所述:http://www.cprogramming.com/tutorial/functors-function-objects-in-c++.html

答案 2 :(得分:0)

this指向调用成员函数的对象。我已经看到它最常用于函数需要返回对自身的引用时,例如operator()=;当重载此运算符时,您通常还会看到类似以下内容以防止自我赋值

foo& foo::operator=(const foo& rhs ){
  if (  this != &rhs ) { 
      //do something
  }
  return *this;
}

我认为这回答了你的问题??

参考:http://msdn.microsoft.com/en-us/library/y0dddwwd.aspx