So basically I'm making a program that has a Vehicle abstract base class and derived classes Truck and Car. From my understanding, a derived class must simply override all pure virtual functions in the abstract base class, and then objects of that derived class can be instantiated. However, I think that I have done this but the compiler still tells me that I cannot create an object of class Car or Truck. I can't figure out why. There are functions that Car needs and Truck doesn't and vice versa, so I thought that I could just override the unneeded functions, make them do something useless, and that would allow me to instantiate objects of Car and Truck, but this is not working. I'll post the necessary files, and if someone could tell me what's going wrong, or maybe just better explain to me how to deal with pure virtual functions that I don't need in derived classes, that'd be great.

Code:
//Vehicle.h
#include <iostream>

class Vehicle
{
	
public:
	virtual void draw() = 0;
	virtual void setTonages() = 0;
	virtual double getGrossTon() const = 0;
	virtual double getNetTon() const = 0;
	virtual void setModel() = 0;
	virtual std::string getModel() const = 0;
	virtual void print() = 0;
	void setColumn(int);
	int getColumn() const;
	void indentCol(const int&);
	
private:
	int columns;
};

#endif
Code:
//Truck.h
#include "Vehicle.h"

class Truck : public Vehicle
{
public:
	virtual void draw();
	virtual void setTonages();
	virtual double getGrossTon() const;
	virtual double getNetTon() const;
	virtual void print();
	
private:
	double grossTon;
	double netTon;

	virtual void setModel()
		{  std::cout << "Empty function";  };
	virtual void getModel()
		{  std::cout << "Empty function";  };
};
Code:
//Car.h
#include "Vehicle.h"
#include <iostream>

class Car : public Vehicle
{
public:
	virtual void draw();
	virtual void setModel(const std::string &);
	virtual std::string getModel() const;
	virtual void print();

private:
	std::string model;
	virtual void setTonages()
		{   cout << "Empty function";  };
	virtual double getGrossTon() const
		{   cout << "Empty function";  };
	virtual double getNetTon() const
		{   cout << "Empty function";  };
};
Those are the 3 header files for my classes; I believe that something must be wrong with them. The client file that is actually trying to instantiate objects just gives me the error that my Car and Truck classes are still abstract. Please help me figure out why! Thanks.