fork download
  1. #ifndef Vector_VectorCpx_h
  2. #define Vector_VectorCpx_h
  3.  
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <cstdlib>
  7. #include <iostream>
  8. #include <fstream>
  9. #include <limits>
  10. using namespace std;
  11.  
  12. // Complex definition -------------------------------------
  13. class Complex
  14. {
  15. private:
  16. double mReal, mImag;
  17.  
  18. public:
  19. Complex(double _real = 0, double _imag = 0);
  20. const double& real() const;
  21. const double& imag() const;
  22. void real(double value);
  23. void imag(double value);
  24. Complex operator+(const Complex& cpx) const;
  25. Complex operator-(const Complex& cpx) const;
  26. Complex operator*(const Complex& cpx) const;
  27. Complex operator/(const Complex& cpx) const;
  28. };
  29. ostream& operator<<(ostream& ostr, const Complex& cp);
  30.  
  31. // Vector of complex definition -------------------------------------
  32. class VectorCpx
  33. {
  34. protected:
  35. Complex *pCpx;
  36. unsigned mSize, mCapacity;
  37. public:
  38. VectorCpx(unsigned _n = 0, const Complex& cpx = Complex(0) );
  39. VectorCpx(const VectorCpx& v);
  40. ~VectorCpx();
  41. unsigned size() const;
  42. unsigned capacity() const;
  43. const Complex& operator[](int i) const;
  44. Complex& operator[](int i);
  45. VectorCpx& push_back(const Complex& cpx);
  46. VectorCpx& resize(unsigned _n, const Complex& cpx = Complex(0));
  47. VectorCpx operator*(const Complex& cpx)const;
  48. Complex operator*(const VectorCpx& v);
  49. VectorCpx& operator=(const VectorCpx& v);
  50. virtual VectorCpx& operator>>(fstream& file);
  51. virtual VectorCpx& operator<<(fstream& file);
  52. };
  53. VectorCpx operator*(const Complex& cpx, const VectorCpx& v);
  54. ostream& operator<<(ostream& ostr, const VectorCpx& v);
  55.  
  56. class AdvVectorO:virtual public VectorCpx
  57. {
  58. public:
  59. AdvVectorO(unsigned number = 0, const Complex& input = Complex(0)); //constructor
  60. AdvVectorO(const VectorCpx& vec); //copy constructor
  61. virtual AdvVectorO& operator>>(fstream& file);
  62. };
  63.  
  64. class AdvVectorI:virtual public VectorCpx
  65. {
  66. public:
  67. AdvVectorI(unsigned number = 0, const Complex& input = Complex(0)); //constructor
  68. AdvVectorI(const VectorCpx& vec); //copy constructor
  69. virtual AdvVectorI& operator<<(fstream& file);
  70. };
  71.  
  72. class AdvVectorIO:public AdvVectorI, AdvVectorO
  73. {
  74. public:
  75. AdvVectorIO(unsigned number = 0, const Complex& input = Complex(0)); //constructor
  76. AdvVectorIO(const VectorCpx& vec); //copy constructor
  77. virtual AdvVectorIO& operator>>(fstream& file);
  78. virtual AdvVectorIO& operator<<(fstream& file);
  79. };
  80.  
  81. /*
  82. 因為在VectorCpx、AdvVectorO、AdvVectorI、AdvVectorIO中,都要自定義">>"和"<<"
  83. 如果只是單純的讓AdvVectorO、AdvVectorI繼承VectorCpx,又讓AdvVectorIO繼承AdvVectorO、AdvVectorI,會造成程式執行時不知道要看哪邊的定義
  84. 因此必須在這四個class裡定義">>"、"<<"的函式前面都加上"virtual",讓他們成為虛擬函式,就可避免這個問題
  85.  
  86. 不過VC++2010還是不會給過,Dev C就會給過,見鬼了
  87. */
  88.  
  89. #endif
  90.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/usr/lib/gcc/i486-linux-gnu/4.7/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status
stdout
Standard output is empty