Hello there,
I've been programming for a while now, in various languages. But now I've decided to do it properly and learn C++.
Here's my problem, I have a class called Linear which has public and protected attributes. And I have another class - Quadratic - which inherits from Linear.
It seems to me that Quadratic is not able to access the protected attributes from Linear. (So I think anyway). The errors I get are as follows:
C:\Users\******\C++\EquationSolver\Linear.cpp In function `int main()':
22) C:\Users\******\C++\EquationSolver\Linear.cpp `dComplex Linear::root1' is protected
58) C:\Users\******\C++\EquationSolver\Quadratic.cpp within this context
17 C:\Users\******\C++\EquationSolver\Quadratic.cpp `dComplex Quadratic::root2' is protected
59) C:\Users\******\C++\EquationSolver\Quadratic.cpp within this context
C:\Users\******\C++\EquationSolver\Makefile.win [Build Error] [Quadratic.o] Error 1
My classes are as follows:
In Linear.cpp:
Code:
#include <iostream>
#include <complex>
using namespace std;
typedef complex<double> dComplex;
class Linear {
public:
Linear();
// Constructor
~Linear();
// Destructor
void setA ( float value );
float getA();
void setB ( float value );
float getB();
dComplex getRoot1();
virtual void solve();
protected:
float a;
float b;
dComplex root1;
};
//
Linear::Linear(){}
//
Linear::~Linear(){}
void Linear::setA(float value) {
a = value;
}
void Linear::setB(float value) {
b = value;
}
float Linear::getA() {
return a;
}
float Linear::getB() {
return b;
}
void Linear::solve() {
root1 = -b / a;
}
dComplex Linear::getRoot1() {
return root1;
}
In Quadratic.cpp:
Code:
#include <complex>
#include <iostream>
#include <cmath>
#include "Linear.cpp"
using namespace std;
typedef complex<double> dComplex;
class Quadratic : public Linear{
public:
float getC();
void setC(float value);
dComplex getRoot2();
void solve();
float disc;
protected:
dComplex root2;
float c;
};
float Quadratic::getC() {
return c;
}
void Quadratic::setC(float value) {
c = value;
}
dComplex Quadratic::getRoot2() {
return root2;
}
void Quadratic::solve() {
disc = b*b - 4*a*c;
if(disc >= 0) {
root1 = (-b + sqrt(disc)) / (a*2);
root2 = (-b - sqrt(disc)) / (a*2);
} else {
float rePart, imPart;
rePart = -b / (2 * a);
imPart = sqrt((4 * a * c) - (b * b)) / (2 * a);
root1 = (rePart, imPart);
root2 = (rePart, -imPart);
}
}
int main(){
Quadratic qSolve;
float aVal, bVal, cVal;
cout<<"Enter value for A: ";
cin>>aVal;
cin.ignore();
cout<<"Enter value for B: ";
cin>>bVal;
cin.ignore();
cout<<"Enter value for C: ";
cin>>cVal;
cin.ignore();
qSolve.setA(aVal);
qSolve.setB(bVal);
qSolve.setC(cVal);
qSolve.solve();
cout<<"Root1 = "<<qSolve.root1<<"\n";
cout<<"Root2 = "<<qSolve.root2<<"\n";
cout<<"\nPress Enter to exit...";
cin.get();
}
Thanks for your time.
P.S. If you have any tips/criticisms for me, please let me know! I only started today.