c++用户自定义类型-创新互联

c++用户自定义类型
  • 结构
  • 枚举

可以通过基本类型,const修饰符,和声明运算符 (例如&,*,[])构造出的类型称为内置类型 ( built-in type)。C++ 语言的内置类型及其操作的集合非常丰富,不过相对来说更偏重底层编程。这些内置类型的优点是能够直接有效地展现出传统计算机硬件的特性,但是并不能向程序员提供便于书写高级应用程序的上层特性。为此,C++语言扩充了这些内置类到和操作,提供了一套成熟的抽象机制 (abstractionmechanism),程序员可以使用这套机制实现其所需的上层功能。C++ 抽象机制的目的主要是让程序员能够设计并实现他们自己的数据类型,这些类型具有恰当的表现形式和操作,程序员可以简单优雅地使用它们。为了与内置类型区别开来,我们把利用 C++ 的抽象机制构建的新类型称为用户自定义类型(user-defined types),诸如类和枚举等等

为梅州等地区用户提供了全套网页设计制作服务,及梅州网站建设行业解决方案。主营业务为网站建设、成都网站建设、梅州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!结构

构建一种新类型的第一步通常是把所需的元素组织成一种数据结构。下面是一个 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元起,快前往官网查看详情吧


网站题目:c++用户自定义类型-创新互联
本文路径:http://hbruida.cn/article/ppchg.html