有方法的类,我不明白类的外观

Class with method, I don´t understand the class´s look

本文关键字:明白 外观 有方法      更新时间:2023-10-16

我正在读《艰难地学习C》一书,在那里发现了一个代码片段,看起来像这样(下面是我的代码,但程序的结构是一样的):

#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;
   }
}

Create_person是一个全局函数,它在空闲存储上创建一个Person对象并返回该对象的地址。在这方面,它与new Person(whatever)完全相同,在这种情况下,它是完全多余的。在某些情况下,这种函数很方便,所以这可能是对工厂函数的一个温和介绍。

使用CreatePerson函数而不是执行new的习惯用法直接称为工厂方法模式。这是相当罕见的它用于没有虚拟函数的类;它通常在调用代码只看到一个抽象基类,对实际类型可能是new ed.

这个函数没有什么特别之处。CCD_ 8和CCD_。

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),正如您已经想到的那样。

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

是全局命名空间中的一个函数,它返回指向Person对象的指针。这里不需要class关键字,可以省略。实际上,它应该被提交。它之所以在那里,可能是因为它是"C风格"。