在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
之前为y
和GetResult
提供所需的值,例如
#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值创建一个类的主要内容,如果未能解决你的问题,请参考以下文章