Java это в C ++ - PullRequest
       22

Java это в C ++

2 голосов
/ 01 сентября 2010

Я в функции в Java, и я создаю новый объект, передавая "this" в качестве параметра:

class AClass { 
    AClass(TestClass testClass) { }
}

class TestClass {
    AClass doSomething()
    {
        return new AClass(this);
    }
}

Как это сделать в C ++?

Должно быть:

class AClass {
    AClass(TestClass* testClass) { }
};

class TestClass {
    AClass* doSomething()
    {
        return new AClass(*this);
    }
};

Должен ли я пройти * это, или & это?

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

Это зависит.Вы, вероятно, ищете это:

class AClass { 
    AClass(TestClass& testClass) { } 
}; 

class TestClass { 
    AClass doSomething() 
    { 
        return AClass(*this); 
    } 
}; 

Чтобы использовать его в C ++:

TestClass testClass;
AClass aClass = testClass.doSomething();

Но что вы действительно пытаетесь сделать?В отличие от Java, C ++ делает различие между значениями и ссылками явным.Вы действительно должны прочитать книгу C ++ хорошего новичка , как предположил Джеймс МакНеллис.

Различие между значениями / ссылками / указателями, которые создает C ++, является фундаментальным для языка, и его несоблюдениепривести к катастрофе.Снова, пожалуйста, возьмите книгу C ++.

0 голосов
/ 01 сентября 2010

Учитывая заявление, которое вы написали

class AClass {
    AClass(TestClass* testClass) { }
};

Вам нужно передать указатель, чтобы вы использовали this. Однако в C ++ обычно предпочитают использовать ссылки (особенно ссылки const) вместо указателей, поэтому вы должны объявить AClass как:

class AClass {
    AClass(const TestClass& testClass) { }
};

К которому бы вы перешли *this.

Теперь есть ситуации, в которых версия указателя является предпочтительной. Например, если testClass было разрешено быть NULL (у вас не может быть нулевых ссылок). Или, если testClass были сохранены в std::vector или аналогичной структуре данных. (Вы не можете иметь массивы ссылок.)

...