Advertisement
Guest User

Untitled

a guest
Jul 25th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdexcept>
  3.  
  4. using namespace std;
  5.  
  6. class A {
  7. private:
  8. double *w; //essendo private, come devo usarlo nelle altre classi?
  9. short len;
  10.  
  11. public:
  12. A(short m);
  13. virtual double foo(short a) = 0;
  14. short getLen();
  15.  
  16. protected:
  17. double get(short i);
  18. };
  19.  
  20. class B : A {
  21. private:
  22. int p;
  23.  
  24. public:
  25. B(short m, int x);
  26. double foo(short a);
  27.  
  28. protected:
  29. double sum(short s);
  30. };
  31.  
  32. template <typename T>
  33. class C : A {
  34. private:
  35. T x;
  36.  
  37. public:
  38. C(short n);
  39. double foo(short r);
  40. T g(T k); //non ho ben capito cosa sta creando in questo modo???
  41. };
  42.  
  43. int main() {
  44.  
  45. srand(111222333);
  46. A *vett[50];
  47. for (int i=0; i<50; i++) {
  48. short n = 1 + rand()%10;
  49. switch (rand()%3) {
  50. case 0:
  51. vett[i] = new B(n, rand()%10 + 1);
  52. break;
  53. case 1:
  54. vett[i] = new C<double>(n);
  55. break;
  56. case 2:
  57. vett[i] = new C<short>(n);
  58. }
  59. }
  60.  
  61. }
  62.  
  63. A::A(short m) {
  64. srand(m); //numeri compresi tra 0 e 1
  65. double w[m]; //il programma mi chiede di inizializzare w con m
  66. len = m; //elementi presi casualmente tra 0 e 1, faccio bene ad usare un
  67. for (int i = 0; i<m; i++) { //generatore casuale?
  68. w[i] = rand()%2;
  69. }
  70. }
  71.  
  72. double A::get(short i) {
  73. return w[i%len];
  74. }
  75.  
  76. short A::getLen() { // il diagramma uml non mi dice che deve fare getLen()
  77. // ho immaginato sia il metodo col quale prendere len, ma come lo
  78. } //implemento?
  79.  
  80. B::B(short m, int x) { //anche qui costruttore che non so che debba fare,
  81. // รจ un costruttore di default?
  82.  
  83. }
  84.  
  85. double B::sum(short s) {
  86. int somma = 0;
  87. for (int i=s%len; i<m; i++) { // il compilatore non mi trova len e w dato che sono privati in A
  88. somma += w[i];
  89. }
  90. sum = somma;
  91. return sum;
  92. }
  93.  
  94. double B::foo(short a) {
  95. return sum(a)/p;
  96.  
  97. }
  98.  
  99. template <typename T>
  100. C<T>::C(short n) {
  101. if constexpr(std::is_same_v<short, T>) //non ho ben capito questa constexpr, su internet
  102. int x = n; //ho trovato poco, idem per is_same_v<>
  103. else
  104. int x = log(1+(sin(n))^2);
  105. }
  106.  
  107. template <typename T>
  108. C<T>::foo(short r) {
  109. return g(r);
  110. }
  111.  
  112. template <typename>
  113. C<T>::g(T k) { //credo che l'implementazione sia sbagliata
  114. return 2*x*(k+1);
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement