在C ++中用2个double值创建一个类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C ++中用2个double值创建一个类相关的知识,希望对你有一定的参考价值。

在C ++中,我试图创建一个包含两个双精度值的Point2D类。所有数据成员和功能都应公开。

对于公众成员应该有

  • 双x
  • 双y

对于构造函数

  • 默认构造函数应将x和y初始化为0.0

  • Point2D(double in_x,double in_y)

    • 将x和y设置为in_x和in_y

对于非成员函数

  • void GetResult(Point2D p1,Point2D p2)

    • 同时打印x和y的值

这是我到目前为止的代码,有人可以指出我的错误吗?

Point2D.h

#ifndef POINT2D_H
#define POINT2D_H

class Point2D
{
public:
    double x;
    double y;

Point2D();
Point2D(double,double);

};

void GetResult(Point2D, Point2D);

#endif

Point2D.cpp

#include "Point2D.h"
#include <iostream>
using namespace std;

Point2D::Point2D()
{
    x = 0.0;
    y = 0.0;
}

Point2D::P1(double in_x, double in_y)
{
    x = in_x;
    y = in_y;
}

Point2D::P2(double in_x, double in_y)
{
    x = in_x;
    y = in_y;
}

void GetResult(Point2D P1, Point2D P2)
{
    cout << P1.x << " " << P1.y << endl;
    cout << P2.x << " " << P2.y << endl;
}

TestCheckPoint1.cpp

#include <iostream>
#include "Point2D.h"
using namespace std;

int main()
{
    Point2D Point1;
    Point1.x = 1.0;
    Point1.y= 2.0;

    Point2D Point2;
    Point2.x= 1.0;
    Point1.y= 2.0;

    GetResult(Point1, Point2);
}
答案

您很亲近,但很明显,您对重载的构造函数和声明类的实例有一些误解。对于初学者,您不需要功能:

Point2D::P1(double in_x, double in_y)
{
    x = in_x;
    y = in_y;
}

Point2D::P2(double in_x, double in_y)
{
    x = in_x;
    y = in_y;
}

[您只需要为带有两个Point2D值的double类使用一个构造函数,就可以了

Point2D::Point2D(double in_x, double in_y)
{
    x = in_x;
    y = in_y;
}

然后在main()中,您需要声明并初始化Point2D的默认构造两个实例,然后在调用x之前为yGetResult提供所需的值,例如

#include <iostream>
#include "Point2D.h"
using namespace std;

int main()
{
    Point2D Point1 (1.0, 2.0);
    Point2D Point2 (1.0, 2.0);

    GetResult(Point1, Point2);
}

note:您可以提供一个允许初始化类成员的初始化器列表,请参见Constructors and member initializer lists。您可以为构造函数提供一个初始化器列表,例如,Point2D() : x(0), y(0) {};和重载Point2D(double, double);。您的构造函数定义将简单为Point2D::Point2D(double in_x, double in_y) : x(in_x), y(in_y) {},并且如果使用x, y创建或将0, 0设置为Point2D Point1;提供的值,则编译器会将x, y初始化为Point2D Point2 (1.0, 2.0);

您在Point2D.h的内容周围包括了Header Guards

的工作非常出色,以防止多个文件中包含多个文件。 Point2D的完整头和源文件可能是:
#ifndef POINT2D_H
#define POINT2D_H

class Point2D
{
public:
    double x;
    double y;

    Point2D();
    Point2D(double,double);

};

void GetResult(Point2D, Point2D);

#endif

#include "Point2D.h"
#include <iostream>
using namespace std;

Point2D::Point2D()
{
    x = 0.0;
    y = 0.0;
}

Point2D::Point2D(double in_x, double in_y)
{
    x = in_x;
    y = in_y;
}

void GetResult(Point2D P1, Point2D P2)
{
    cout << P1.x << " " << P1.y << endl;
    cout << P2.x << " " << P2.y << endl;
}

示例使用/输出

编译并运行将导致:

$ ./bin/TestCheckPoint1
1 2
1 2

注:

根本不需要在using namespace std;中使用main(),并且您实际上不应该在任何地方包括整个标准名称空间。只需删除两个呼叫并将std::添加到您的两个cout呼叫和两个endl呼叫中(或仅使用' '而不是std::endl;)。参见Why is “using namespace std;” considered bad practice?

而不是简单地使用:

void GetResult(Point2D P1, Point2D P2)
{
    std::cout << P1.x << " " << P1.y << '
';
    std::cout << P2.x << " " << P2.y << '
';
}

仔细检查,如果还有其他问题,请告诉我。

以上是关于在C ++中用2个double值创建一个类的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中定义静态变量

使变量指向另一个变量

C|指针的10种经典应用场合

单例模式在项目实战中的几个应用

单例模式在项目实战中的几个应用

在c#中用arraylist创建的数组,在用contains查看是不是包含某一个对象时,判