Конструкторы классов
27.12.2012, 23:59. Показов 1001. Ответов 1
Помогите разобраться с классами, не пойму как мне сделать правильно конструкторы класса Application,выдвёт ошибки в его конструкторе, помогите исправить пожалуйста:
2 IntelliSense: no instance of constructor "Quadrangle::Quadrangle" matches the argument list
Error 1 error C2664: 'Quadrangle::Quadrangle(Point,Point,Poin t,Point)' : cannot convert parameter 1 from 'int' to 'Point'
|
есть класс точки Point
класс четрыхугольник Quadrangle
класс приложение Application
| C++ | 1
2
3
4
5
6
7
8
9
10
11
12
| //Point.h
#pragma once
class Point{
public:
double x;
double y;
Point();//Конструктор по умолчанию
Point(double x,double y);//Конструктор инициализации
Point(const Point &a);//Конструктор копии
}; |
|
| C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| //Quadrangle.h
#pragma once
#include "stdafx.h"
#include "Point.h"
class Quadrangle{
public:
Point a,b,c,e;
Quadrangle();//Конструктор по умолчанию
Quadrangle(Point A,Point B, Point C, Point E);//Конструктор инициализации
double sguare();//Площадь прямоугольника
double sguareMK (double count1, double n);//Площадь по методу Монте-Карло
double sguaretrapeze ();//Площадь трапеции
}; |
|
| C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
| //Applicaton.h
#pragma once
#include "stdafx.h"
#include "Point.h"
#include "Quadrangle.h"
class Application{
public:
Quadrangle quadrangle;
Application();//Конструктор по умолчанию
Application(Quadrangle quadrangle1);//Конструктор инициализации
double MK();
}; |
|
| C++ | 1
2
3
4
5
6
| //Point.cpp
#include "stdafx.h"
#include "Point.h"
Point::Point():x(0),y(0){}
Point::Point(double X, double Y):x(X),y(Y){}
Point::Point(const Point&a): x(a.x),y(a.y){} |
|
| C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| //Quadrrangle.cpp
#pragma once
#include "stdafx.h"
#include "Point.h"
#include "Quadrangle.h"
//Конструкторs класса
Quadrangle::Quadrangle():a(0,0),b(0,0),c(0,0),e(0,0){}
Quadrangle::Quadrangle(Point A,Point B, Point C, Point E):a(A),b(B),c(C),e(E){}
//Площадь прямоугольника
double Quadrangle::sguare(){
double sguare;
if(e.x>=c.x)
sguare=(e.x-a.x)*(b.y-a.y);
else
sguare=(c.x-a.x)*(b.y-a.y);
//double sguare=(max(c.x,e.x)-min(a.x,b.x))*(b.y-a.y);
return sguare;
}
//Площадь Монте-Карло
double Quadrangle::sguareMK (double count1, double n)
{
double sguare2=(double)sguare()*((double)count1/n);
return sguare2;
}
//Площадь трапеции
double Quadrangle::sguaretrapeze ()
{
double sguare3=0.5*(b.y-a.y)*((c.x-b.x)+(e.x-a.x));
return sguare3;
} |
|
| C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
| //App;ication.cpp
#pragma once
#include "stdafx.h"
#include "Point.h"
#include "Quadrangle.h"
#include "Application.h"
#include <iostream>
#include <iomanip>
#include <time.h>
#include <windows.h>
#include <math.h>
using namespace std;
Application::Application():quadrangle(0,0,0,0){}
Application::Application(Quadrangle Quadrangle1):quadrangle(Quadrangle1){}
double myRand(double low, double high) {
return low+(double)rand()/RAND_MAX*(high-low);
}
//int CheckCoords(Point &a, Point&b, Point&c, Point&e)
int CheckCoords(Application &Apl )
{
//1-e>b и e.x<c.x; 2 - e.x>c.x; 3 - e.x==c.x; -1 - неправильные координаты
if(Apl.quadrangle.e.x<=Apl.quadrangle.a.x)
return -1;
if(Apl.quadrangle.c.x<=Apl.quadrangle.b.x)
return -1;
if(Apl.quadrangle.a.x >= Apl.quadrangle.b.x)
return -1;
if((Apl.quadrangle.e.x > Apl.quadrangle.b.x)&&(Apl.quadrangle.e.x < Apl.quadrangle.c.x))
return 1;
if(Apl.quadrangle.e.x > Apl.quadrangle.c.x)
return 2;
if(Apl.quadrangle.e.x == Apl.quadrangle.c.x)
return 3;
return -1;
}
//Третий вариант
//void f(Point &a, Point&b, Point&c, Point&e)
void MK(Application &Apl)
{
//int mode = CheckCoords(a,b,c,e);
int mode = CheckCoords(Apl);
double k1,b1,k2,b2,bx,bxx;
double sguare, sguare2,sguare3,pogr,timemc;
int count1;
k1=(Apl.quadrangle.b.y-Apl.quadrangle.a.y)/(Apl.quadrangle.b.x-Apl.quadrangle.a.x);
b1=Apl.quadrangle.b.y- k1 * Apl.quadrangle.b.x;
if(mode != 3)
k2=(Apl.quadrangle.c.y-Apl.quadrangle.e.y)/(Apl.quadrangle.c.x-Apl.quadrangle.e.x);
else
k2=0;
b2 =Apl.quadrangle.e.y- k2 * Apl.quadrangle.e.x;
if(mode == -1)
{
cout<<"Введены неправильные координаты!"<<endl;
return;
}
cout<<"_______________________________________________________________________________"<<endl;
cout<<"| Количество"<<"|Количество"<<"|Площадь Методом"<<"| "<<"| Погрешность:"<<"| Время |"<<endl;
cout<<"| точек,n:"<<"| попавших "<<"| Монте Карло: "<<"|Площадь:"<<"| d,%: "<<"| выполнения,мс: |"<<endl;
cout<<"| "<<"| точек,m: "<<"| "<<"| "<<"| "<<"| |"<<endl;
cout<<"_______________________________________________________________________________"<<endl;
for (int n=1000;n<10000001;n=n*10)
{
count1=0;
clock_t tStart = clock();
Point xy;
for (int i=0;i<n;i++)
{
xy.x=myRand(min(Apl.quadrangle.a.x,Apl.quadrangle.b.x),max(Apl.quadrangle.c.x,Apl.quadrangle.e.x));
xy.y=myRand(Apl.quadrangle.a.y,Apl.quadrangle.b.y);
bx=xy.y-k1*xy.x;
bxx=xy.y-k2*xy.x;
switch(mode)
{
case 1:
if ((bx<=b1) && (bxx>=b2))
{
count1++;
}
break;
case 2:
if((bx<=b1) && (bxx<=b2))
{
count1++;
}
break;
case 3:
if ((bx<=b1))
{
count1++;
}
break;
}
}
//sguare=(max(c.x,e.x)-min(a.x,b.x))*(b.y-a.y);//площадь прямоугольника
sguare=Apl.quadrangle.sguare();
//sguare2=(double)sguare*((double)count1/n);//площадь Монте Карло
sguare2=Apl.quadrangle.sguareMK(count1,n);
//sguare3=0.5*(b.y-a.y)*((c.x-b.x)+(e.x-a.x));//площадь обычная
sguare3=Apl.quadrangle.sguaretrapeze();
pogr=abs(((sguare3-sguare2)/sguare3) *100) ;
double m= (double)(clock() - tStart)/CLOCKS_PER_SEC;
double times=m*1000;
cout<<"|"<<setprecision(2)<<setiosflags(ios::fixed|ios::showpoint)<<setw(11)<<n<<"|"<<setw(10)<<count1<<"|"<<setw(15)<<sguare2<<"|"<<setw(8)<<sguare3<<"|"<<setw(13)<<pogr<<"|"<<setw(16)<<times<<"|"<<endl;
cout<<"________________________________________________________________________________"<<endl;
}
} |
|
| C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
| //main.cpp
#include "stdafx.h"
#include "Point.h"
#include "Quadrangle.h"
#include "Application.h"
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"");
srand(time(NULL));
Application Apl;
Point xy;
int v;
cout<<" Метод Монте-Карло "<<endl;
cout<<"^ Y"<<endl;
cout<<"| B C "<<endl;
cout<<"| _________________________________________"<<endl;
cout<<"| | ################# |"<<endl;
cout<<"| | ################ # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # # |"<<endl;
cout<<"| | ############### # #|"<<endl;
cout<<"| |#######################################|"<<endl;
cout<<"_______|_______________________________________|_____>"<<endl;
cout<<"0 A E D X"<<endl;
cout<<"Введите номер действия, которое необходимо выполнить"<<endl;
cout<<"1 - Ввести координаты вручную"<<endl;
cout<<"2 - Контрольный пример 1 (B < E < C)"<<endl;
cout<<"3 - Контрольный пример 2 (E > C)"<<endl;
cout<<"4 - Контрольный пример 3 (E = C)"<<endl;
cout<<"5 - Случайные координаты"<<endl;
cout<<"6 - Пересчитать"<<endl;
cout<<"7 - Выход"<<endl<<endl;
do
{
cout<<"Номер действия: ";
cin>>v;
switch(v)
{
case 1:
cout<<"Введите координаты точек A,B,C,E"<<endl;
cout<<"Координans точки A(x,y)"<<endl;
cout<<"x=";cin>>Apl.quadrangle.a.x;cout<<endl;cout<<"y=";cin>>Apl.quadrangle.a.y;cout<<endl;
cout<<"Координans точки B(x,y)"<<endl;
cout<<"x=";cin>>Apl.quadrangle.b.x;cout<<endl;cout<<"y=";cin>>Apl.quadrangle.b.y;cout<<endl;
cout<<"Координans точки C(x,y)"<<endl;
cout<<"x=";cin>>Apl.quadrangle.c.x;cout<<endl;cout<<"y=";cin>>Apl.quadrangle.c.y;cout<<endl;
cout<<"Координans точки E(x,y)"<<endl;
cout<<"x=";cin>>Apl.quadrangle.e.x;cout<<endl;cout<<"y=";cin>>Apl.quadrangle.e.y;cout<<endl;
Apl.MK();
break;
case 2:
Apl.quadrangle.a.x=100;Apl.quadrangle.a.y=100;Apl.quadrangle.b.x=200;Apl.quadrangle.b.y=300;Apl.quadrangle.c.x=500;Apl.quadrangle.c.y=300;Apl.quadrangle.e.x=400;Apl.quadrangle.e.y=100;
//f(s.a,s.b,s.c,s.e);
Apl.MK();
break;
case 3:
Apl.quadrangle.a.x=100;Apl.quadrangle.a.y=100;Apl.quadrangle.b.x=200;Apl.quadrangle.b.y=300;Apl.quadrangle.c.x=500;Apl.quadrangle.c.y=300;Apl.quadrangle.e.x=800;Apl.quadrangle.e.y=100;
Apl.MK();
break;
case 4:
Apl.quadrangle.a.x=100;Apl.quadrangle.a.y=100;Apl.quadrangle.b.x=200;Apl.quadrangle.b.y=300;Apl.quadrangle.c.x=500;Apl.quadrangle.c.y=300;Apl.quadrangle.e.x=500;Apl.quadrangle.e.y=100;
Apl.MK();
break;
case 5:
Apl.quadrangle.a.x=rand()%1000;Apl.quadrangle.a.y=rand()%1000;Apl.quadrangle.b.x=rand()%1000+Apl.quadrangle.a.x;Apl.quadrangle.b.y=rand()%1000+Apl.quadrangle.a.y;Apl.quadrangle.c.x=rand()%1000+Apl.quadrangle.b.x;Apl.quadrangle.c.y=Apl.quadrangle.b.y;Apl.quadrangle.e.x=rand()%1000+Apl.quadrangle.b.x;Apl.quadrangle.e.y=Apl.quadrangle.a.y;
cout<<Apl.quadrangle.a.x<<" "<<Apl.quadrangle.a.y<<" "<<Apl.quadrangle.b.x<<" "<<Apl.quadrangle.b.y<<" "<<Apl.quadrangle.c.x<<" "<<Apl.quadrangle.c.y<<" "<<Apl.quadrangle.e.x<<" "<<Apl.quadrangle.e.y;
Apl.MK();
break;
case 6:
Apl.MK();
break;
}
}
while( v != 7);
exit(0);
system("pause");
return 0;
} |
|
0
|