0

Java 有一个构造,它允许方法通过“this()”引用调用自身。这个约定的名称现在让我忘记了。 编辑:称为构造函数委托,如下所述。仅适用于构造函数,而不适用于我错误的一般方法。

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

例如,我有一个具有多个重载等的函数。

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

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

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

3 回答 3

2

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

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

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

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

正如您所描述的那样,没有通过上下文给定名称的其他函数的隐含知识。

请注意,在 Java 中,这仅适用于构造函数,称为构造函数链接。对于一般方法,它不处理此问题。

C++11 还增加了对这一概念的支持(作为委托构造函数),尽管语法与 Java、C# 和其他具有此概念的语言不同。

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

SomeType() : SomeType(42) {}

SomeType(int arg)
{
   // ...
于 2013-06-03T16:47:19.900 回答
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

于 2013-06-03T16:47:28.150 回答
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

于 2013-06-03T16:49:46.650 回答