如何将指针传递给构造函数

How to pass a pointer to a constructor?

本文关键字:构造函数 指针      更新时间:2023-10-16

我了解如何创建一个对象,我了解如何然后创建一个指针到该对象。但是我很难在另一个对象/类中创建一个指向对象的指针。

我已经创建了一个Car和一个Engine类。我想让Car类有一个指向引擎对象的指针,这个引擎对象将被传递到Car类的构造函数中。我没有运气试图找出正确的语法来做这件事。

Engine.h

#pragma once
class Engine
{
private:
    int _power;
public:
    Engine(int);
    ~Engine();
    int getPower();
    void setPower(int);
};

Engine.cpp

#include "stdafx.h"
#include "Engine.h"

Engine::Engine(int power)
{
    _power = power;
}

Engine::~Engine()
{
}
int Engine::getPower()
{
    return _power;
}
void Engine::setPower(int power)
{
    _power = power;
}

Car.h

#pragma once
#include "Engine.h"
class Car
{
private:
    Engine* _engine;
public:
    Car();
    ~Car();
}; 

Car.cpp

#include "stdafx.h"
#include "Car.h"

Car::Car(Engine &engine)
{
    _engine = engine;
}
Car::~Car()
{
}
谁能告诉我该怎么做呢?

简单地改变Car.cpp

Car::Car(Engine &engine){...}

Car::Car(Engine* engine): _engine(engine){}

,也不要忘记将Car.h中构造函数的签名更改为

Car(Engine*);

否则,您将指针与引用混合在一起,它们在语义上是不相同的。还要考虑使用构造函数初始化列表,而不是构造函数内部的赋值。对于pod来说,这没有什么区别,但是对于构造成本高的对象,这就有区别了,因为首先对象是默认构造的,然后通过复制构造函数赋值给它。