Olá.
Pedi para o chat GPT me gerar um código com alocação dinâmica de um objeto e ele me devolveu o seguinte código:
#include <iostream>
#include <string>
class Person {
private:
std::string name;
int age;
public:
Person(const std::string& n, int a) : name(n), age(a) {} //minha dúvida
void displayInfo() {
std::cout << "Name: " << name << ", Age: " << age << std::endl;
}
};
int main() {
// Dynamically allocate a Person object
Person* person = new Person("John Doe", 30);
// Access object's member functions
person->displayInfo();
// Deallocate the memory
delete person;
return 0;
}
Minha dúvida é neste trecho:
Person(const std::string& n, int a) : name(n), age(a) {}
Não entendi a razão do ChatGPT ter usado o operador “&” para referenciar um endereço, sendo que o que está sendo passado é uma string literal, que é tratada como uma constante em C++. Ao questiná-lo, foi respondido que n está referenciando à um objeto, mas nem a string literal, nem a variável name, pra mim eles são member variables do objeto que seria person.
E o int a não possui a mesma notação pois segundo o ChatGPT não haveria necessidade nesse código de alterar o objeto original, ou seja só precisariamos do valor copiado. Também não entendi essa explicação int age seria também um objeto?
Resumindo Não entendi a razão de se utilizar & no ponto em que eu destaquei e o motivo do Chat considerar std::string como um objeto.
E para mim como um iniciante em C++ acho um pouco estranho essa notação “name(n), age(a) {}”.
Desde já agradeço.