使用另一个类的对象创建一个类

时间:2013-12-03 13:34:11

标签: c++ class

我正在尝试创建一个类Line,它由另一个类Point的两个对象组成:

class Point
{
    double x, y, z;

    public:
    // constructor from 3 values
    Point(double x, double y, double z);

    // copy constructor
    Point(const Point &p);

    // method display
    void display();
};

// constructor from 3 values
Point::Point(double x, double y, double z)
: x(x), y(y), z(z)
{}

// copy constructor
Point::Point(const Point &p)
: x(p.x), y(p.y), z(p.z)
{}

void Point::display()
{
    cout << "Point(" << x << ", " << y << ", " << z << ")\n";
}


class Line
{
    Point pnt1, pnt2;

    public:
    // constructor from 2 points
    Line(Point& pnt1, Point& pnt2);

    // method display line
    void display();
};

// constructor from 2 points
Line::Line(Point& pnt1_, Point& pnt2_)
: pnt1(pnt1_), pnt2(pnt2_)
{}

// method display line
void Line::display()
{
    cout << "Line(Point(" << pnt1.x << ", " << pnt1.y << ", " << pnt1.z << ")" << ", Point(" << pnt2.x << ", " << pnt2.y << ", " << pnt2.z << ")\n";
}

这是主要的:

#include <iostream>
#include <cstdio>
#include "geometryitems.cpp"
using namespace std;

int main()
{
    // initialise object Point
    cout << endl << "Point initialisation:" << endl;

    Point pnt = Point(0.0, 0.0, 0.0);
    cout << "pnt = "; pnt.display();

    Point pnt2 = Point(1.0, 1.0, 1.0);
    cout << "pnt2 = "; pnt2.display();

    // initialising object Line
    cout << "Line initialisation:" << endl;

    Line line = Line(pnt, pnt2);
    line.display();

    return 0;
}

这些点工作正常,但该行给了我class "Point" has no members named a1, b1, c1, a2, b2, c2的错误。

如何使用类Line的对象创建类Point?谢谢。

更新

我已使用复制构造函数更新了代码,但它仍在讨论私有x, y, z。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

将复制构造函数添加到Point类:

class Point
{
public:
    Point(const Point& p)
        : x(p.x), y(p.y), z(p.z)
        {}

    ...
};

然后您可以将其用于Line构造函数:

Line::Line(const Point& p1, const Point& p2)
    : pnt1(p1), pnt2(p2)
{}

Line类不需要单独的点变量a1b1c1等等。当然,实际的Point对象不需要有一个名为like的成员变量,您尝试访问它们。另请注意Point中的成员变量是私有的,Line::display函数无法访问它们。

答案 1 :(得分:0)

类点有成员x,y,z而不是a1,b1,c1。 它应该是

void Line::display()
{
    cout << "Line(Point(" << pnt1.x << ", " << pnt1.y << ", " << pnt1.z << ")" << ",  Point(" << pnt2.x << ", " << pnt2.y << ", " << pnt2.z << ")\n";
}

答案 2 :(得分:0)

你的问题有解决方案:类“Point”没有名为a1,b1,c1,a2,b2,c2的成员。

所以你的类包含x,y和z ....尝试使用x,y和z打印它

确保成员是公开的或使用getter和setter。

答案 3 :(得分:0)

您可以为私人数据成员获取快速而肮脏的解决方案。

   double getX() { return x ; };
   double getY() { return y ; };
   double getZ() { return z ; };

我改变了Line cstor。

   // constructor from 2 points
   Line::Line(Point& _pnt1, Point& _pnt2)
   : pnt1(_pnt1), pnt2(_pnt2)
   {}

并在你的cout中改变了对这些getter的调用。

   cout << "Line(Point(" << pnt1.getX() << ", " << pnt1.getY() << ", " << pnt1.getZ() << ")" << ", Point(" << pnt2.getX() << ", " << pnt2.getY() << ", " << pnt2.getZ() << ")\n";

检查出来:http://ideone.com/aHmin9