Класс с методом, я не понимаю, как выглядит класс

Я читаю книгу «Изучите трудный путь» и нашел там фрагмент кода, который выглядит примерно так (ниже приведен мой код, но структура программы такая же):

#include <iostream>
#include <string>

using namespace std;

class Person {
private:
string name;
int age;
public:
Person(string name, int age) {;
this->name = name;
this->age = age;
}~Person() {
}
};

// When whould I do like this?
class Person *Create_person(string name, int age) {
class Person *person = new Person(name, age);
return person;
};

int main() {
Person *person = Create_person("John", 30);
}

Особенно на

class Person *Create_person(string name, int age) {
class Person *person = new Person(name, age);
return person;
};

Что это за функция? Почему я так называю это, а не просто Person *person = new Person?
Это короткая форма для

class Person {
public:
Person *Create_person(string name, int age){
Person *person = new Person(name, age);
return person;
}
}

?

-1

Решение

В этой функции нет ничего особенного. class Person а также Person точно такого же типа.

class Person *Create_person(string name, int age) {
class Person *person = new Person(name, age);
return person;
};

а также

Person *Create_person(string name, int age) {
Person *person = new Person(name, age);
return person;
};

значит то же самое. Функция в любом случае кажется бессмысленной, вы можете просто позвонить new Person(name, age) напрямую, как вы уже поняли.

3

Другие решения

Create_person это глобальная функция, которая создает Person объект в бесплатном магазине и возвращает адрес этого объекта. В этом отношении это точно так же, как new Person(whatever) и, в этом контексте, полностью излишним. Существуют контексты, где такая функция удобна, так что это может быть нежное введение в заводские функции.

5

Идиома использования CreatePerson функция, а не делать new
напрямую, называется шаблоном фабричного метода. Это довольно редко можно увидеть
используется для класса без виртуальных функций; обычно используется, когда
вызывающий код видит только абстрактный базовый класс и ничего не знает о
фактический тип, который может быть newредактор

4

class Person *Create_person(string name, int age) {
class Person *person = new Person(name, age);
return person;
};

это функция в глобальном пространстве имен, которая возвращает указатель на Person объект. class Ключевое слово здесь не нужно и может быть опущено. На самом деле, это должен быть опущенным. Причина, по которой это так, возможно, потому что это «C-стиль».

1