| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 386 人关注过本帖
标题:关于C++中类的问题······
只看楼主 加入收藏
有风的夜晚
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:26
注 册:2010-3-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
关于C++中类的问题······
各位大虾们,本人刚学数据结构,想用VC6.0中的类编写线性表的顺序实现,结果发现了几个问题:

1.类中以public定义的数据能否被主函数引用?

2.return和exit后返回的 OK ,OVERFLOW等是怎么用的?是不是要先用#define宏定义下?
  return 1 和exit(-1)运行后有什么表现?

3.对类中的数据如何用构造函数初始化:
  a.无输入值时?
  b.有输入值时?
  希望讲详细点,我对此很混乱········谢谢
 
4.如果有一个模板的话会更好·····

以下是我编的程序,运行到没什么太大问题,但是不是很满意:
  a.希望能随自己意愿编写不同类型的表····
  b.结构体SqList L是在主函数中定义的,要是能在类中直接定义就好了·····
  c.其他的倒没想到什么,希望大家帮我多看看提提意见····


//线性表的顺序印象实现
#include<iostream.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10

typedef struct
{
int * elem;
int length;
int listsize;
int elemnum; //代替书中的ListLength函数
}SqList;

class List
{
public:
InitList(SqList L); //建立一个空表,并返回基地址
DestroyList(SqList L); //删除表,并释放空间
ClearList(SqList L); // 清空表
ListEmpty(SqList L); //调查表是否为空,实则返回1
  GetElem(SqList L, int i, int *t); //获得表内某个元素的值
LocateElem(SqList L, int e, int *q(int t,int e)); // 找到某个元素的位置
PriorElem(); //找到某个元素的前驱
NextElem(); //找到某个元素的后继
ListInsert(); //在表中插入元素   
ListDelete(); //删除某个元素
ListTraverse(); //对表中元素依次调用函数*visit



   

};

int List::InitList(SqList L)
{
//暂时只能是整型
//一次只能建一个
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) exit(0);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 1;
}

int List::DestroyList(SqList L)
{
int *p=L.elem;
while(L.listsize--) free(p++);
return 1;
}

int List::ClearList(SqList L)
{
int i=0;
int *q=L.elem;
for( ; i<L.elemnum ; i++)   
{
*q=0;
q=q+1;
}
return 1;
}

int List::ListEmpty(SqList L)
{
int i=0;
int *q=L.elem;
for( ; i<L.listsize ; i++)
{
if(*(q++)) break;
}
if(i==L.listsize) return 0;
else return 1;
}

int List::GetElem(SqList L, int i, int *t)
{
if(ListEmpty( L )) *t=*(L.elem+i);
return ( *t );
}

int List::LocateElem(SqList L, int e, int *q(int t,int e))
{
int i=0;
int t=*(L.elem);
for( ; i<L.elemnum ; i++)
{
if(q(t,e)) break;
}
if(i==L.elemnum) return 0;
else return ( i );
}





void main()
{
extern SqList L;  
List Text;
Text.InitList( L);
cout<<Text.ListEmpty(L);
}



再次感谢各位大侠
搜索更多相关主题的帖子: 数据 public return 线性表 
2010-04-06 22:56
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:20 
1.成员的生命期和标准C++一样,类定义的成员可以存活在整个类生命期,类函数里的变量也只在函数里存活.类没被声明前不能使用任何成员,包括为了完成类功能在类之外的其他地方写功能代码.

2.返回值是函数的类型,比如int a();就只能返回整形,你所说的都是宏定义过的.也可以返回一个类或者结构,比如你定义一个结构名字叫test 使用它来声明函数 test a();在A函数内部再次声明一次结构,然后返回结构.
struct test{
 int Day;
 int Month;
 int Year;
};
test a(int a,int b,int c)
{
    test my;
    my.Day=a;
    my.Month=b;
    my.Year=c;
    return my;//my是之前声明过的结构,如果没有这个结构或者类,那就是宏
}
int main()
{
    test g;
    g=a(1,2,3);
    cout<<g.Day<<" "<<g.Month<<" "<<g.Year;
}

3.构造函数是使用在某些功能必须提前初始化某些动作,或者设置特定的变量以保持正确.不是强迫所有成员在构造函数里完成,构造函数留空也可以.
比如说,类功能是修改某个文件,但修改这个文件必须先获得权限,那构造函数就可以写获得权限的功能.
你也许说我不用写,我可以强制在某个成员函数里完成,但如果不取得权限在没有使用那个函数前使用了其他成员就会发生错误.
类的构造和解析的意义就是安全保证代码不会出现BUG,你的代码也许会团队开发,就算是个人,也增强了维护性.
那个东西没什么神秘的,也不是用了类就必须使用的,看个人风格,毕竟就算不使用类这个东西,也能写出任何程序.

4.代码太长,懒得看
2010-04-07 00:09
月光321
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:124
注 册:2010-3-22
收藏
得分:0 
学习学习了!!!
2010-04-07 10:55
快速回复:关于C++中类的问题······
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022842 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved