有方法的班级,我不明白班级的样子

时间:2012-09-04 13:05:13

标签: c++ class struct

我正在阅读“Learn C the Hard Way”一书,并在那里找到了一个代码片段(下面是我的代码,但程序的结构是相同的):

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

使用CreatePerson函数的习惯用语,而不是new 直接称为工厂方法模式。这是相当罕见的 它用于没有虚函数的类;它通常用于 调用代码只能看到一个抽象的基类,而且一无所知 可能new编辑的实际类型。

答案 2 :(得分:3)

这个功能没有什么特别之处。 class PersonPerson的类型完全相同。

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 :(得分:1)

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

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