VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1077|回复: 8

求解关于类的定义和链表类问题

[复制链接]

1

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-12-7 17:30:01 | 显示全部楼层 |阅读模式
我想编一个画图的程序,其中要用到多种图形元素(直线,矩形,圆等),每一种图形元素要建立一个类(派生于一个自己建立的图形类),但是当用链表类存储这些图形时,该如何处理?或者说这个链表类该如何建立?它的数据类型应该是什么?用CList还是CObList?
谢谢啦,
回复

使用道具 举报

1

主题

11

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-12-7 17:45:01 | 显示全部楼层
class CElement
{
public:
virtual void Draw(){};
};

class CLine : public CElement {};
class CCircle : public CElement {};

std::vector< CElement* > myList;
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-12-7 20:00:01 | 显示全部楼层
CObList要求你的图形类必须是从MFC的CObject继承来的, 所以用模板类CList<...>可能更好一点
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-12-7 20:30:01 | 显示全部楼层
首先得定义几个点,例如,首节点,指针,尾节点.数据内容
再存储这些点,用于保存线的信息
回复

使用道具 举报

1

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
 楼主| 发表于 2020-12-7 20:45:01 | 显示全部楼层
谢谢楼上几位大哥。
如果我想只建立一个链表类存储各种图形元素,那么我的链表类的数据元素类型用什么呢?用基类可以吗?是不是必须用指针?
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-12-7 21:00:01 | 显示全部楼层
用基类的指针或引用, 不能用基类对象
回复

使用道具 举报

0

主题

55

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-12-7 21:15:01 | 显示全部楼层
// Point3D.h: interface for the CPoint3D class.
//
//////////////////////////////////////////////////////////////////////
#include <afxtempl.h>

#if !defined(AFX_POINT3D_H__FB60210D_9230_43D0_B3C5_1FA12314F579__INCLUDED_)
#define AFX_POINT3D_H__FB60210D_9230_43D0_B3C5_1FA12314F579__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define LIMITVALUE 0.0001        //×ø±êÏàµÈÏÞÖµ        2014.2.25.        ËÕ¼Ó¡£


//Èýά¿Õ¼äµã×ø±êÀà

class CPoint3D  
{
public:
        CPoint3D();
        CPoint3D(double x);
        CPoint3D(double x,double y);
        CPoint3D(double x,double y,double z);
        virtual ~CPoint3D();

public:
        double x;
        double y;
        double z;

        void    Maximal(CPoint3D &p);
        void    Minimal(CPoint3D &p);
        void    Maximal(double * p);
        void    Minimal(double * p);
        virtual CPoint3D operator= (const CPoint3D &p);
        virtual CPoint3D operator+ (const CPoint3D &p);
        virtual CPoint3D operator- (const CPoint3D &p);
        virtual CPoint3D operator* (const CPoint3D &p);
//        2014.2.25.        Ëոġ£
        virtual bool     operator==(const CPoint3D &p);
        virtual CPoint3D operator*=(const double scale);
        virtual CPoint3D operator+=(const CPoint3D &p);
        virtual CPoint3D operator-=(const CPoint3D &p);
        virtual CPoint3D operator= (const double *  p);
};

//´øÓÐÊôÐÔÂëά×ø±êµãÀà

class CCodePoint3D : public CPoint3D  
{
public:
        CCodePoint3D();
        virtual ~CCodePoint3D();

public:
        long code;

public:
        virtual CCodePoint3D operator = (const CCodePoint3D &p);
        CCodePoint3D *Create(long Code);
        CCodePoint3D *Create(long Code,double x,double y,double z);
};

typedef CArray<CPoint3D,CPoint3D> CPoint3DArray;
typedef CArray<CCodePoint3D,CCodePoint3D> CCodePoint3DArray;
typedef struct
{
        long lNo;
        CPoint3DArray Point3DArray;
}POINT3DARRAY;
typedef        CTypedPtrList<CPtrList, POINT3DARRAY*> CPoint3DArrayList;

#endif // !defined(AFX_POINT3D_H__FB60210D_9230_43D0_B3C5_1FA12314F579__INCLUDED_)
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-12-8 17:15:01 | 显示全部楼层
继承 CObject,存入CList中,用基类指针即可,楼上的给的示例很好了,大体按这个思路写吧。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-12-8 17:30:01 | 显示全部楼层
参考微软的矢量绘图程序drawcli,上面的例子你学会了这些都不是问题了。
不管是什么链表,都是可以达到目的的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表