Skip to content

Instantly share code, notes, and snippets.

@obiltschnig
Created December 7, 2019 09:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save obiltschnig/3297a429a56b3e43b8a16312f3ddb56b to your computer and use it in GitHub Desktop.
Save obiltschnig/3297a429a56b3e43b8a16312f3ddb56b to your computer and use it in GitHub Desktop.
#include <memory>
#include <iostream>
struct Acceleration
{
float x;
float y;
float z;
};
class Accelerometer
{
public:
virtual Acceleration acceleration() = 0;
virtual ~Accelerometer() = default;
};
class MPU6050Accelerometer: public Accelerometer
{
public:
MPU6050Accelerometer(int fd): _fd(fd)
{
}
~MPU6050Accelerometer()
{
std::cout << "~MPU6050Accelerometer" << std::endl;
}
Acceleration acceleration();
private:
int _fd;
};
Acceleration MPU6050Accelerometer::acceleration()
{
Acceleration acc;
//...
// acc.x = ...;
// acc.y = ...;
// acc.z = ...;
std::cout << "MPU6050Accelerometer::accelerate()" << std::endl;
return acc;
}
class SomeOtherAccelerometer: public Accelerometer
{
public:
SomeOtherAccelerometer()
{
}
~SomeOtherAccelerometer()
{
std::cout << "~SomeOtherAccelerometer" << std::endl;
}
Acceleration acceleration();
};
Acceleration SomeOtherAccelerometer::acceleration()
{
Acceleration acc;
//...
// acc.x = ...;
// acc.y = ...;
// acc.z = ...;
std::cout << "SomeOtherAccelerometer::accelerate()" << std::endl;
return acc;
}
int main(int argc, char* argv[])
{
std::shared_ptr<Accelerometer> pAcc(std::make_shared<MPU6050Accelerometer>(23));
Acceleration acc = pAcc->acceleration();
std::shared_ptr<Accelerometer> pAcc2 = pAcc;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment