So, I was learning about inheritance and there was a question in last year's question set. It was just to create a diamond problem and inherit data member marks
from base class to final class
. So, I created a abstract base class for void setmarks()
and override it in all inherited class. To resolve the ambiguity, I add virtual
in inheritance declaration.
Here is my code:
#include <iostream>
using namespace std;
class Evalution
{
public:
float marks;
virtual void setmarks()=0;
void displaymarks() {}
};
class Theoretical :virtual protected Evalution
{
public:
float internal1, internal2;
int assignments;
void setmarks()
{
cout << "enter the marks in internal1, internal2, assignments" << endl;
cin >> internal1 >> internal2 >> assignments;
}
};
class Practical :virtual protected Evalution
{
public:
float lab, viva;
void setmarks()
{
cout << "enter the marks in lab and viva" << endl;
cin >> lab >> viva;
}
};
class Final : public Theoretical, public Practical
{
public:
marks = internal1 + internal2 + assignments + lab + viva;
void setmarks() {}
void displaymarks()
{
cout << "the final marks is " << marks << endl;
}
};
int main()
{
Final f;
f.Theoretical::setmarks();
f.Practical::setmarks();
f.displaymarks();
}
While running the program on online gcc compiler
, there is error ‘marks’ does not name a type
. What went wrong? Even if:
class Evalution
{
public:
//float marks;
virtual void setmarks()=0;
void displaymarks() {}
};
And:
class Final : public Theoretical, public Practical
{
public:
float marks = internal1 + internal2 + assignments + lab + viva;
void setmarks() {}
void displaymarks()
{
cout << "the final marks is " << marks << endl;
}
};
The program still gives me a garbage value. Help please.