3.3 理解托管类型
学习一门编程语言,从大的方面讲,通常需要掌握两件事:掌握语法和熟悉类型。语法是编写程序的规范,开发人员至少要知道如何声明变量,怎样创建对象等等,类型(Type)代表被操作的事物本身的性质。
托管扩展是对传统C++语言的扩充,对于开发人员来讲,必须要掌握它才可以在Visual C++中进行.NET应用程序的开发。学习C++托管扩展当然不用从头来学,C++的基本语法没有任何改变,只是我们熟知的传统类型发生了很多变化,需要认真学习。
类型包含的内容很广泛,我们在编写程序时几乎随时都和各种形式的类型打交道,如为了控制循环的次数而声明一个整型的变量;为了完成对某个函数的调用,我们必须给函数传递顺序、类型都正确的参数;为了可以重用已有工作的成果,我们采用面向对象的思想,对相关业务处理功能进行封装,并编写几个业务类便于以后使用。
因为这些工作对我们来讲太熟悉了,久而久之,类型在我们脑海中,早已经变成了一个个指针、变量、类或是结构那样的实体。这种思想习惯成自然之后,就会使大部分开发人员对类型的理解似是而非。因为,我们确实在实际工作中很少顾及这些基础知识。
对于每天都要伴随超级开发工具度日的现代开发人员来讲,没有类型的概念是非常正常的,但是,就是这一点儿知识缺漏,可能会给充分理解托管扩展带来一定的麻烦。所以,本节我们将用一段较小的篇幅,简要复习一下传统C++语言中有关类型方面的知识。
在传统C++语言中,类型被分层了三大类,第一类是基础类型(Fundamental Types),第二类是继承类型(Derived Types),第三类是类类型(ClassTypes)。它们在含义上各有不同:
基础类型主要包含内置于(build-in)语言之中的类型,包括整型、浮点型、双精度型。通常情况下,基础类型创建的实例被称为变量。基础类型中主要包含的类型的内容如表3-2所示。
表3-2 常见基础类型
|
类 别 |
类 型 |
内 容 |
大 小 |
|
|
|
整型(Integer) |
Char |
字符类型通常包含字符集中的对应字符的数值,在微软C++中,每个字符都有对应的ASCII码
C++编译器认为char、signed char、unsigned char类型都是不同的类型。即使默认情况下某个变量的类型是signed char,但是编译器依然会认为它是int型,除非指定特殊的编译开关 |
1 字节 |
|
|
|
int |
Int类型大于short int类型,并小于long类型
Int类型的对象可以被声明成signed int或unsigned int。需要强调的是,signed int和int类型完全等价 |
4字节 |
|
|
|
_int n |
可以设定整型数的位数,N可以是8、16、32或64…… |
— |
|
|
|
long |
Long类型是一个整型类型,大于int类型
Long类型的对象可以被声明成signed long或unsigned long。需要强调的是,signed long和long类型完全等价 |
4字节 |
|
|
浮点型 (Floating) |
float |
Float类型是最小的浮点类型 |
4字节 |
|
|
|
double |
Double类型是一个浮点类型,它大于float类型,但是小于long double类型 |
8字节 |
|
|
|
|
|
|
|
|
|
继承类型是从内置类型中继承而来的新类型,这些类型通常包含:
● 数组
对象变量的数组可以包含指定数目的特殊类型。例如,一个从整型继承下来的类型,就是一个整型数组。下面的代码声明并定义了一个包含10个int变量的数组和一个包含5个Sample Class类的数组:
int ArrayOfInt[10];
SampleClass aSampleClass[5];
● 函数
函数往往具有指定类型的参数和指定类型的返回值。
● 指针
指向变量或对象的指针可以在内存中选择对象。对象可以是全局的或是本地的,也可以是动态分配的。指向一个指定类型的函数的指针可以将选择函数的时间推迟到运行时。下面的例子演示了一个指向char类型变量的指针:
char *szPathStr;
● 引用
引用提供了一个访问对象的简单方法。下面的例子演示了如何使用引用来将对象作为函数的参数进行传递:
BigClassType &func( BigClassType &objname )
{
objname.DoSomething();
objname.SomeData = 7;
return objname;
}
注意:
传递引用的实质是传递对象所在的地址,这样做较拷贝参数而言,可以减少函数调用的开销。
>>>返回 Visual C++.NET中文版实用培训教程 专题 | 返回 学院部落 首页
[1] [2] [3] 下一页 |