用point类写一个三角形类
C++ : write a triangle class using point class
在c++我试图创建一个三角形类使用点类。在Java中正确的方法是:
public class Point {
double x, y;
public Point(double x, double y){
this.x=x;
this.y=y;
}
}
public class Triangle {
Point p1,p2,p3;
public Triangle(Point p1, Point p2, Point p3){
this.p1=p1;
this.p2=p2;
this.p3=p3;
}
}
in main:
Point p1=new Point(0,0);
Point p2=new Point(1,1);
Point p3=new Point(-1,1);
Triangle t1=new Trianle(p1,p2,p3);
在c++中,我有:
class point{
double x1,y1;
public:
point(double x, double y){
x1=x;
y1=y;
}
};
class triangle{
point p1, p2, p3;
public:
triangle(point varp1, point varp2, point varp3){
p1=varp1;
p2=varp2;
p3=varp3;
}
};
在主要:
point p1(-1,1);
point p2(1,1);
point p3(0,0);
triangle t1(p1,p2,p3);
不知何故这不起作用,为什么?..................................................................................................................................................................................................................................................
这是行不通的,因为triangle
的构造函数会在给point
成员赋值之前尝试默认构造它,但是point
没有默认构造函数。这是因为您只提供了一个接受2个参数的point
构造函数,因此删除了默认的默认构造函数。
相反,应该使用成员初始化列表来初始化点:
dreieck(point varp1, point varp2, point varp3)
: p1(varp1), p2(varp2), p3(varp3)
{ }
用参数varp1
、varp2
和varp3
分别初始化p1
、p2
和p3
,从而避免了默认构造。
在c++中,成员变量是在构造函数体之前构造的,如果你没有指定如何构造它们,那么它们将被默认初始化,所以你的构造函数相当于这个
triangle(point varp1, point varp2, point varp3)
: p1(), p2(), p3() // <--- default-initialize each member
{
p1=varp1;
p2=varp2;
p3=varp3;
}
现在应该很明显,您的构造函数并没有将成员创建为构造函数参数的副本,而是将它们创建为默认构造对象,然后为它们分配新值,要做到这一点,point
类需要一个默认构造函数。
其他答案显示了如何正确地做到这一点:使用成员初始化列表。您也应该为point
构造函数这样做。使用成员初始化式是c++中构造成员变量和基类的惯用方法,而不是在构造函数体中赋值。对于某些类型的成员变量(引用、const对象和非defaultconstructible类型),它是唯一的初始化成员变量的方法。
您的point
类没有定义(或自动提供)默认构造函数。因为您重载了构造函数,所以没有包含编译器生成的构造函数。在triangle
类中,默认构造了三个类型为point
的对象。您将得到一个错误,因为没有可用的默认构造函数。
应该显式地定义构造函数(并且应该通过成员初始化列表初始化成员),例如:
class point
{
public:
point() : x1(0), y1(0) {}
...
};
此外,如果我们让你的参数化构造函数接受可选的参数,它可以作为默认构造函数。例如:class point
{
public:
point(double x = 0, double y = 0) : x1(x), y1(y) {}
...
};
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 以C++输出一个数字三角形
- 形成一个斐波那契三角形,使得每个数字是上面左对角线或右对角线上两个数字的总和
- 给定一个用三角形镶嵌的补丁,如何修改其新的顶点位置
- 使用 C++ 库 GLEW 在 openGl 中绘制一个红色三角形
- 创建一个绿色三角形C Directx
- 创建一个程序以输出三角形平方数的4个
- 在OpenGL中打印一个红色三角形
- 如何打印一个不相等的三角形
- 我如何对此代码进行添加以使用我的 arduino 打印一个完整的三角形
- Direct3D:尝试绘制一个三角形,但什么也没显示
- 如何在 Qwidget 的中心设计一个三角形(在 QT 中使用 OpenGl)
- 输出一个三角形
- Qt和OpenGL,如果我使用属性,可以画一个三角形
- 在我点击的地方画一个三角形
- 用point类写一个三角形类
- GL VBO问题:第一个和最后一个三角形带没有正确显示
- 融合一个三角形循环并行化,计算子指标
- 用C++做一个三角形
- 加上另一个三角形