指针练习改进

Pointers practice improvement

本文关键字:练习 指针      更新时间:2023-10-16

你好!我想了解更多关于指针的信息,所以我写了以下内容:

 struct Data {
     int day, month, year;
     double hour;
 }; 
class Movie {
    protected:
        string name;
        Data data;
        int requiredAge;
        int freeSeats;
    public:
        Movie(){  }
        Movie(string moviename, Data dat, int age, int seats) {
            name = moviename;
            data = dat;
            requiredAge = age;
            freeSeats = seats;
        }
        int getFreeSeats() { return freeSeats; } 
        ~Movie(){  }
};

然后我将其初始化为main:

int _tmain(int argc, _TCHAR* argv[])
{
    Data d; d.day = 12; d.hour = 16; d.month = 04; d.year = 2016;
    Movie movie("Movie Name", d, 16, 35 );
    system("pause");
    return 1;
}

为什么我应该在这里使用指针,而在哪里使用指针

在这里使用指针唯一有意义的地方是将结构传递给构造函数:

    Movie(string moviename, Data* dat, int age, int seats) {
        name = moviename;
        data = *dat;
        requiredAge = age;
        freeSeats = seats;
    }

这将避免在调用构造函数时创建结构的完整副本。只是传球要便宜一点。

而在C中,这将是唯一的选择,在C++中有一个更好的方法:使用引用:

    Movie( const string& moviename, const Data& dat, int age, int seats) {
        name = moviename;
        data = dat;
        requiredAge = age;
        freeSeats = seats;
    }

顺便说一句,对于int参数,通过引用传递它们是没有用的,因为它们不比指针大(以字节为单位)。

一个更好的版本将使用初始化列表:

    Movie( const string& moviename, const Data& dat, int age, int seats)
        : name(moviename), data(dat), requiredAge(age), freeSeats(seats) {}

(感谢您的提示,@NathanOliver)