I have no error or warning when compling this code but as you can see it keeps changing one of my inputs (int ID) into a random number. This same number is still the output when i change the imput.

code:

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

class student
{
protected:
	string name;
	int ID;
public:
	student()
	{
		name = "no name";
		ID = 0;
	}
	student (string pname,int pID)
	{
		name = pname;
		ID = pID;
	}
	~student(){}
	//virtual void add()=0;
	virtual void print()=0;
};

class physstd : public student
{
private:
	string course;
	string grade;
	int percentage;
public:
	physstd()
	{
		course = "Null";
		grade = "Null";
		percentage = 0;
	}
	physstd(string name,int pID,string pcourse, string pgrade, int ppercentage):student(name,ID)
	{
		course = pcourse;
		grade = pgrade;
		percentage = ppercentage;
	}
	~physstd(){}
	//void add();
	void print()
	{
		cout<<"| "<<name<<" | "<<ID<<" | "<<course<<" | "<<grade<<" | "<<percentage<<"% |"<<endl<<endl;
	}
};
class chemstd : public student
{
private:
	string course;
	string grade;
	int percentage;
public:
	chemstd()
	{
		course = "Null";
		grade = "Null";
		percentage = 0;
	}
	chemstd(string name,int pID,string pcourse, string pgrade, int ppercentage): student(name,ID)
	{
		course = pcourse;
		grade = pgrade;
		percentage = ppercentage;
	}
	~chemstd(){}
	//void add();
	void print()
	{
		cout<<"| "<<name<<" | "<<ID<<" | "<<course<<" | "<<grade<<" | "<<percentage<<"% |"<<endl<<endl;
	}
};

class mathstd : public student
{
private:
	string course;
	string grade;
	int percentage;
public:
	mathstd()
	{
		course = "Null";
		grade = "Null";
		percentage = 0;
	}
	mathstd(string name,int pID,string pcourse, string pgrade, int ppercentage): student(name,ID)
	{
		course = pcourse;
		grade = pgrade;
		percentage = ppercentage;
	}
	~mathstd(){}
	//void add();
	void print()
	{
		cout<<"| "<<name<<" | "<<ID<<" | "<<course<<" | "<<grade<<" | "<<percentage<<"% |"<<endl<<endl;
	}
};
int main()
{
	student *pp;
	physstd s;
	physstd s1("Terence Britton",5,"C++","A*",100);
	pp=&s;		pp->print();
	pp=&s1;		pp->print();

	return 0;
}

output:

| no name | 0 | Null | 0% |

| Terence Britton | -858993460 | C++ | A* | 100%

Obviously -858993460 is not what i entered in the main, which was 5. Any help with this would be much appreciated

thanks

This question has already been answered. Start a new discussion instead.