新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
构建一种新类型的第一步通常是把所需的元素组织成一种数据结构。下面是一个 struct的示例:
struct Vector {int sz; //元素的数量
double* elem; //指向元素的指针
}
这是Vector 的第一个版本,其中包含一个int 和一个 double*一个 Vector 类型的变量可以通过下述形式进行定义:
Vector v;
仅就v本身而言,它的用处似乎不大,因为v的 elem 指针并没有指向任何实际的内容。为了让它变得更有用,我们需要令v指向某些元素。例如,我们可以构造一个如下所示的Vector :
void vector_init(Vector& v, int s){v.elem =new double[s]; //分配一个数组,它包舍s个double值
v.sz = s;
}
也就是说,v的elem 成员被赋予了一个由 new 运算符生成的指针,而 sz 成员的值则是元素的个数。Vector& 中的符号 & 指定我们通过非常量引用的方式传递 v,这样 vector_init() 就能修改传入其中的向量了。
new运算符从一块名为自由存储 (free store)(又称为动态内存(dynamic memory)或堆(heap)的区域中分配内存。
Vector 的一个简单应用如下所示:
double read_and_sum(int s){//从cin 读入s个整数,然后返回这些整数的和;其中,假定s 是正的
Vector v;
vector_init(v, s);
for (int i=0; i!=s; ++i)
cin >>v.elem[i];
double sum = 0;
for (int i = 0; i != s; ++i)
sum += v.elem[i];
return sum;
}
显然,在灵活性和优雅程度上我们的 Vector 与标准库 vector 还有很大差距,其是Vector 的使用者必须清楚地知道它的所有细节。
类对于用户自定义类型来说,为了将其所有属性捏合在一起,形成一个“真正的类型”,在表示形式和操作之间建立紧密的联系还是很有必要的。特别是,我们常常希望自己构建的类型易于使用和修改,数据的使用具有一致性,并且表示形式最好对用户是不可见的。此时,最理想的做法就是把类型的接口(所有代码都可使用的部分) 与其实现(对其他不可访问的数据具有访问权限)分离开来。在 C++ 中,实现上述目的的语言机制被称为类class)。类含有一系列成员 (member),可能是数据、函数或者类型。类的 public 成员定义该类的接口,private 成员则只能通过接口访问。例如:
class Vector{public:
Vector(int s): elem{new double[s]}, sz{s}{} //构建一个Vector
double& operator[](int i){return elem[i];} //通过下标访问元素
int size(){return sz;}
private:
double* elem; //指向元素的指针
int sz; //元素的数量
}
于是
Vector v(6);
总的来说,Vector 对象是一个“句柄”,它包含指向元素的指针 (elem)以及元素的数量(sz)。在不同 Vector 对象中元素的数量可能不同(本例是 6),即使同一个 Vector 对象在不同时刻也可能含有不同数量的元素 。不过,Vector 对象本身的大小永远保持不变。这是 C++ 语言处理可变数量信息的一项基本技术:一个固定大小的句柄指向位于“别处”(即通过 new 分配的自由空间)的一组可变数量的数据。
枚举c++提供的枚举类型可通过关键字class来表明是强类型,例如:
enum class Color{red, blue, greeen};
enum class Traffic_light{green, yellow, red};
Color col = Color::red;
Traffic_light light = Traffic_light::red;
其中枚举值(如red)位于其enum class 的作用域之内,因此我们可以在不同的enum class 中重复使用这些枚举值而不致引起混淆。例如,Color::red 是指 Color 的 red,它与Traffic light::red 显然不同。
枚举类型常用于描述规模较小的整数值集合。通过使用有指代意义的 (且易于记忆的)枚举值名字可提高代码的可读性,降低出错的风险。
enum 后面的 class 指明了枚举是强类型的,且它的枚举值位于指定的作用域中。不同的 enum class 是不同的类型,这有助于防止对常量的意外误用。在上面的例子中,我们不能混用 Traffic light和 Color 的值
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧