Форум программистов, компьютерный форум CyberForum.ru

Конструкторы классов - C++

Восстановить пароль Регистрация
 
yuliyayuliya28
3 / 3 / 0
Регистрация: 06.03.2011
Сообщений: 319
27.12.2012, 23:59     Конструкторы классов #1
Помогите разобраться с классами, не пойму как мне сделать правильно конструкторы класса Application,выдвёт ошибки в его конструкторе, помогите исправить пожалуйста:


2 IntelliSense: no instance of constructor "Quadrangle::Quadrangle" matches the argument list
Error 1 error C2664: 'Quadrangle::Quadrangle(Point,Point,Point,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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 23:59     Конструкторы классов
Посмотрите здесь:

Конструкторы C++
C++ Конструкторы классов
C++ Классы, конструкторы, деструкторы, методы классов
Конструкторы C++
C++ Наследование классов и конструкторы
C++ Конструкторы C++
C++ Конструкторы
Что такое конструкторы классов, копирования, по умолчанию с запретом неявного приведения аргументов? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
28.12.2012, 00:51     Конструкторы классов #2
C++
1
Application::Application():quadrangle(0,0,0,0){}
в конструктор вы передаете 0 - это целое число, тип int
а по описанию конструктора, должен быть тип Point
Yandex
Объявления
28.12.2012, 00:51     Конструкторы классов
Ответ Создать тему
Опции темы

Текущее время: 06:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru