读书人

C++的类的定义.net-VS2008解决方案

发布时间: 2012-04-16 16:20:04 作者: rapoo

C++的类的定义—.net-VS2008
//定义一个顺序表类
class SeqList
{
private :
DataType *list;
int size;
int maxSize;
public :
SeqList(int max);
~SeqList(void);
void Initiate(int x);
int Size(void)const;
int Insert(int i,DataType& x);
DataType Delete(const int i);
DetaType GetData(int i)const;
}
我想请问一下,倒数第3行的“DataType& x”可不可以写成“DataType x”为什么呢?
还有就是倒数第2行的const和最后一行的const有什么不同呢?
(我是新手,希望大家可以帮帮我哦)

[解决办法]
楼主应该买本 C++primer好好学学基础

1. 可以的,DataType& x 是引用, 具体去了解一下C++引用

2. const int i 是定义 i为一个常量。 最后一行的 是代表 GetData函数是个常量函数。
[解决办法]

探讨
我想请问一下,倒数第3行的“DataType& x”可不可以写成“DataType x”为什么呢?

[解决办法]
DaTaType也是一个类吧,你不用引用的时候,那么int Insert(int i,DataType& x);

这句会重新实例化一对象,而没有合适的参数传递给构造函数。。引用的话就是作为参数的那个对象本身,而不是另外开辟内存空间新建一个对象。
const放在最后面代表当前函数不能改动数据成员
前面那个const代表 i 这个整数不能在那个函数中改动
[解决办法]
问题1:

如果你写成DataType x,函数在接受该参数时就会对其进行复制,这样消耗的机器资源就更大些。而且在函数里改变了x的值的话不会影响到给它传递值的实参本身。比如说传给它的x原本是(1,2),你在函数里把x更改为(1,3),那么退出函数后那个实参的值还是(1,2)。

而按照DataType& x的写法,函数在接受该参数时只是传送了一个地址——指向程序中实参的地址,这样消耗的资源就比较少。这样的引用传递下实际存储该参数的变量还是原来那个实参,这个函数里只是用自己指定的名字来代表了它,所以,如果你在函数里改变了x,那么退出函数后你会发现实参也被同样的改变了。按照上面的例子来说,退出函数后那个实参的值就会是(1,3)。

问题2:

类的成员函数后带上const则表示该函数不会对任何数据成员进行修改,可以在被声明为const的对象里调用该函数。

如果你在带有const标识的成员函数里修改类的数据成员,编译器会认为这是个错误函数从而不予通过。

如果你将一个对象声明为const,那你就不能调用该对象的非const成员函数,而只能调用它的const成员函数。

其实这些东西在语法书上都有介绍,仔细看看就明白了。

读书人网 >C++

热点推荐