Proxy pattern: Difference between revisions

Content deleted Content added
m Reverted 1 edit by 185.20.29.54 (talk) to last revision by Frap (TW)
C++Bro123 (talk | contribs)
m C++: Improve C++ example
Line 218:
=== C++ ===
<source lang=Cpp>
#include <iostream>
#include <memory>
 
class ICar {
public:
virtual ~ICar() { std::cout << "ICar destructor!" << std::endl; }
 
virtual void DriveCar() = 0;
virtual ~ICar () {
std::cout << "ICar destructor!" << std::endl;
}
};
 
class Car : public ICar {
public:
void DriveCar() override {
void DriveCar() override { std::cout << "Car has been driven!" << std::endl; }
}
};
 
class ProxyCar : public ICar {
public:
private:
ProxyCar (int driver_age) : realCar(new Car()), _driver_agedriver_age_(driver_age) {}
ICar* realCar;
int _driver_age;
 
public:
ProxyCar (int driver_age) : realCar(new Car()), _driver_age(driver_age) {}
~ProxyCar () {
delete realCar;
}
 
void DriveCar() {
if (_driver_agedriver_age_ > 16) {
realCarreal_car_->DriveCar();
} else {
std::cout << "Sorry, the driver is too young to drive." << std::endl;
}
}
 
private:
std::unique_ptr<ICar> real_car_ = std::make_unique<Car>();
int driver_age_;
};
 
int main() {
// How to use above Proxy class?
std::unique_ptr<ICar*> car = new std::make_unique<ProxyCar>(16);
int main()
void car->DriveCar() override {;
{
ICar* car = new ProxyCar(16);
car->DriveCar();
delete car;
 
car = new std::make_unique<ProxyCar>(25);
car->DriveCar();
delete car;
}
</source>