什么叫编程函数?他有什么作用?c++的结构是怎样的?
c++类的构造函数详解
一、 构造函数是干什么的
class Counter
{
public:
// 类Counter的构造函数
// 特点:以类名作为函数名,无返回类型
Counter()
{
m_value = 0;
}
private:
// 数据成员
int m_value;
}
该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作
eg: Counter c1;
编译系统为对象c1的每个数据成员(m_value)分配内存空间,并调用构造函数Counter( )自动地初始化对象c1的m_value值设置为0
故:
构造函数的作用:初始化对象的数据成员。
二、 构造函数的种类
class Complex
{
private :
double m_real;
double m_imag;
public:
// 无参数构造函数
// 如果创建一个类你没有写任何构造函数,则系统会自动生成默认的无参构造函数,函数为空,什么都不做
// 只要你写了一个下面的某一种构造函数,系统就不会再自动生成这样一个默认的构造函数,如果希望有一个这样的无参构造函数,则需要自己显示地写出来
Complex(void)
{
m_real = 0.0;
m_imag = 0.0;
}
// 一般构造函数(也称重载构造函数)
// 一般构造函数可以有各种参数形式,一个类可以有多个一般构造函数,前提是参数的个数或者类型不同(基于c++的重载函数原理)
// 例如:你还可以写一个 Complex( int num)的构造函数出来
// 创建对象时根据传入的参数不同调用不同的构造函数
Complex(double real, double imag)
{
m_real = real;
m_imag = imag;
}
// 复制构造函数(也称为拷贝构造函数)
// 复制构造函数参数为类对象本身的引用,用于根据一个已存在的对象复制出一个新的该类的对象,一般在函数中会将已存在对象的数据成员的值复制一份到新创建的对象中
// 若没有显示的写复制构造函数,则系统会默认创建一个复制构造函数,但当类中有指针成员时,由系统默认创建该复制构造函数会存在风险,具体原因请查询 有关 “浅拷贝” 、“深拷贝”的文章论述
Complex(const Complex & c)
{
// 将对象c中的数据成员值复制过来
m_real = c.m_real;
m_img = c.m_img;
}
// 类型转换构造函数,根据一个指定的类型的对象创建一个本类的对象
// 例如:下面将根据一个double类型的对象创建了一个Complex对象
Complex::Complex(double r)
{
m_real = r;
m_imag = 0.0;
}
// 等号运算符重载
// 注意,这个类似复制构造函数,将=右边的本类对象的值复制给等号左边的对象,它不属于构造函数,等号左右两边的对象必须已经被创建
// 若没有显示的写=运算符重载,则系统也会创建一个默认的=运算符重载,只做一些基本的拷贝工作
Complex &operator=( const Complex &rhs )
{
// 首先检测等号右边的是否就是左边的对象本,若是本对象本身,则直接返回
if ( this == &rhs )
{
return *this;
}
// 复制等号右边的成员到左边的对象中
this->m_real = rhs.m_real;
this->m_imag = rhs.m_imag;
// 把等号左边的对象再次传出
// 目的是为了支持连等 eg: a=b=c 系统首先运行 b=c
// 然后运行 a= ( b=c的返回值,这里应该是复制c值后的b对象)
return *this;
}
};
下面使用上面定义的类对象来说明各个构造函数的用法:
void main()
{
// 调用了无参构造函数,数据成员初值被赋为0.0
Complex c1,c2;
// 调用一般构造函数,数据成员初值被赋为指定值
Complex c3(1.0,2.5);
// 也可以使用下面的形式
Complex c3 = Complex(1.0,2.5);
// 把c3的数据成员的值赋值给c1
// 由于c1已经事先被创建,故此处不会调用任何构造函数
// 只会调用 = 号运算符重载函数
c1 = c3;
// 调用类型转换构造函数
// 系统首先调用类型转换构造函数,将5.2创建为一个本类的临时对象,然后调用等号运算符重载,将该临时对象赋值给c1
c2 = 5.2;
// 调用拷贝构造函数( 有下面两种调用方式)
Complex c5(c2);
Complex c4 = c2; // 注意和 = 运算符重载区分,这里等号左边的对象不是事先已经创建,故需要调用拷贝构造函数,参数为c2
}
三、思考与测验
1. 仔细观察复制构造函数
Complex(const Complex & c)
{
// 将对象c中的数据成员值复制过来
m_real = c.m_real;
m_img = c.m_img;
}
为什么函数中可以直接访问对象c的私有成员?
2. 挑战题,了解引用与传值的区别
Complex test1(const Complex& c)
{
return c;
}
Complex test2(const Complex c)
{
return c;
}
Complex test3()
{
static Complex c(1.0,5.0);
return c;
}
Complex& test4()
{
static Complex c(1.0,5.0);
return c;
}
void main()
{
Complex a,b;
// 下面函数执行过程中各会调用几次构造函数,调用的是什么构造函数?
test1(a);
test2(a);
b = test3();
b = test4();
test2(1.2);
// 下面这条语句会出错吗?
test1(1.2); //test1( Complex(1.2 )) 呢?
}
四、附录(浅拷贝与深拷贝
上面提到,如果没有自定义复制构造函数,则系统会创建默认的复制构造函数,但系统创建的默认复制构造函数只会执行“浅拷贝”,即将被拷贝对象的数据成员的 值一一赋值给新创建的对象,若该类的数据成员中有指针成员,则会使得新的对象的指针所指向的地址与被拷贝对象的指针所指向的地址相同,delete该指针 时则会导致两次重复delete而出错。下面是示例:
【浅拷贝与深拷贝】
#include
#include
class Person
{
public :
// 构造函数
Person(char * pN)
{
cout << "一般构造函数被调用 !
";
m_pName = new char[strlen(pN) + 1];
//在堆中开辟一个内存块存放pN所指的字符串
if(m_pName != NULL)
{
//如果m_pName不是空指针,则把形参指针pN所指的字符串复制给它
strcpy(m_pName ,pN);
}
}
// 系统创建的默认复制构造函数,只做位模式拷贝
Person(Person & p)
{
//使两个字符串指针指向同一地址位置
m_pName = p.m_pName;
}
~Person( )
{
delete m_pName;
}
private :
char * m_pName;
};
void main( )
{
Person man("lujun");
Person woman(man);
// 结果导致 man 和 woman 的指针都指向了同一个地址
// 函数结束析构时
// 同一个地址被delete两次
}
// 下面自己设计复制构造函数,实现“深拷贝”,即不让指针指向同一地址,而是重新申请一块内存给新的对象的指针数据成员
Person(Person & chs);
{
// 用运算符new为新对象的指针数据成员分配空间
m_pName=new char[strlen(p.m_pName)+ 1];
if(m_pName)
{
// 复制内容
strcpy(m_pName ,chs.m_pName);
}
// 则新创建的对象的m_pName与原对象chs的m_pName不再指向同一地址了
}
1.构造函数
构造函数(constructor)是类的一个特殊的成员函数,它与类名同名。当定义该类的对象时,构造函数将被系统自动调用用以实现对该对象的初始化。
构造函数不能有返回值,因而不能指定包括void在内的任何返回值类型。
构造函数的定义与其他成员函数的定义一样可以放在类内或类外。
构造函数的定义格式为
类名(形参说明)
{函数体}
构造函数既可以定义成有参函数,也可以定义成无参函数,要根据问题的需要来定。
注意:程序中不能直接调用构造函数,构造函数是在创建对象时由系统直接调用的,因此,在构造函数中一般完成初始化类成员变量的操作。
2.构造函数的重载
一个类中出现了两个以上的同名的成员函数时,称为类的成员函数的重载。
在类的成员函数的重载中,比较常见形式是构造函数的重载,当类中出现了重载构造函数时,C++语言将根据构造函数中的参数个数和类型选择合适的构造函数来完成对象的构造。
3.默认构造函数与缺省参数的构造函数
如果在类中没有显示定义构造函数,则编译系统会为该类提供一个默认的构造函数,该默认构造函数是一个无参函数,函数体为空,它仅仅负责创建对象,而不做任何初始化工作(即不给相应的数据成员赋初值),所以在该类的对象创建时不能保证有一个确定的初始状态。
良好的编程习惯应该是给类提供合适的完成初始化工作的构造函数。
但是,只要一个类定义了一个构造函数(不一定是无参构造函数),编译系统就不再提供默认的构造函数。
当构造函数具有缺省参数时,称为具有缺省参数的构造函数,在使用具有缺省参数的构造函数时,要防止二义性。
4.拷贝构造函数
拷贝构造函数是一种特殊的构造函数。定义拷贝构造函数的一般格式为
类名::类名(const 类名 &形式参数)
{ 函数体 }
拷贝构造函数的函数名与类名同名。该函数也没有返回值。
拷贝构造函数的功能是通过将一个同类对象的值拷贝给一个新对象,来完成对新对象的初始化,即用一个对象去构造另外一个对象。
如果在类的定义中没有定义拷贝构造函数,则编译系统将自动生成一个具有上述形式的默认的拷贝构造函数,作为该类的公有成员。
5.析构函数
与构造函数对应的是析构函数。当一个对象被定义时,系统会自动调用构造函数为该对象分配相应的资源,当对象使用完毕后且在对象消失前,系统会自动调用类的析构函数来释放这些系统资源。
析构函数也是类的一个特殊的成员函数,其函数名称是在类名的前面加上“~”;它没有返回值,也没有参数。一个类中只能拥有一个析构函数,所以析构函数不能重载。
析构函数的定义方式为
~类名()
{ 函数体 }
如果程序员在定义类时没有为类提供析构函数,则系统会自动创建一个默认的析构函数,其形式为
~类名()
{ }
对象被析构的顺序与其创建时的顺序正好相反,即最后构造的对象最先被析构。
如果一个对象是被new运算符动态创建的,当使用delete运算符释放它时,delete将会自动调用析构函数。
6.一个类的对象作为另一个类的数据成员
当一个类中的数据成员是某一个类的对象时,可称这种成员是新建类的子对象或对象成员,则新类的定义格式可表示为
calss X
{
类名1 成员名1;
类名2 成员名2;
类名3 成员名3;
……………
类名n 成员名n;
…。………… //其他成员
};
其中,X为新建类的类名,类名1、类名2、……、类名n必须是已定义过的类。如
class A {};
class B
{
A a;
};
则在创建类B的对象(调用类B的构造函数)时,会自动调用类A的构造函数。如果类A的构造函数为有参函数时,通常采用初始化表的方式来调用构造函数。
新类的构造函数的一般定义格式为
新类(参数表0):成员1(参数表1),成员2(参数表2),…,成员n(参数表n)
{ ………… }
其中,成员1、成员2、……、成员n是新类中的对象成员;参数表1提供初始化成员1所需的参数,参数表2提供初始化成员2所需的参数,依此类推,并且这几个参数表中的参数均来自参数表0.另外,初始化新类的非对象成员所需的参数,也由参数表0提供。
7.常对象与常对象成员
(1)常对象
常对象是指对象常量,其定义格式为
const 类名 对象名;
从格式中可以看出,常对象的定义与一般对象的定义相比,在类名前必须加const关键字。
常对象具有以下特点
l 常对象在定义时必须进行初始化,而且在程序中不能再对其进行更新。
l 通过常对象只能调用类中的常成员函数,而不能调用类中的其他成员函数。
(2)常对象成员
常对象成员分为常成员函数和常数据成员。
1)常成员函数
在类中,使用关键字const说明的成员函数成为常成员函数,常成员函数的说明格式为
类型 函数名(形参表) const;
类中的常成员函数与普通成员函数相比,具有以下特点
l 常成员函数为类的只读函数,这种成员函数可以读取数据成员的值,但不可以更新数据成员的值,它也不能调用该类中没有const修饰的其他成员函数。
l 常成员函数定义中的const关键字是函数类型的一部分,因此在其实现部分中也要带上const关键字。
l 常成员函数定义中的const关键字可以参与区分重载函数。
在某个变化过程中,有两个变量x、y,如果给定自变量x一个值,那么应变量有且只有一个变量与之对应,那么我们称y是x的函数。
人们对C++有许多不同的看法,保守的C++程序员坚持用其他语言创建COM组件,他们认为只有真正的程序员使用C++。另一方面,VB程序员认为C++是一种很难掌握和使用的语言,没有必要增加编程时间和进行艰难的尝试。Java程序员认为他们比C++程序员强,因为James Gosling(Java的发明者)吸收了许多语言(包括C++ )的优点发明了Java,本章和下一章的目的就是消除对C++的偏见和错误概念。
本章集中介绍用C++ 建立服务器组件,不讲述C++语言,如果想学C++ ,请参阅Ivor.Horton著的《Beginning Visual C++6》,Wrox 出版,书号为ISBN 1-861000-88-X。
本章的主要内容有:
? C++简史。
? 使用C++原因。
? 从VB移植到C++。
? ATL、STL和MFC介绍。
? 建立一个COM组件。
? 错误处理与调试。
更重要的是应该记住,现在,不只是在用C++建立组件,可以使用Visual C++中可用的任何工具,使得建立过程更加容易。先从C++的起源谈起。
17.1 C++语言
在决定是否使用C++语言之前,最好是搞清楚这种语言的实质,让我们看一下C++的历史和现状。
17.1.1 C++简史
刚开始形成的是C语言,那些想建立更快更有效的代码的程序员非常欣赏C语言,有一位名叫Bjarne Stroustrup的人却不满足于仅仅是生产快速代码,他想创建面向对象的C语言编程。他开始对C语言的内核进行必要的修改,使其能满足面向对象模型的要求。C++从此产生。
Bjarne Stroustrup是C++的最初设计者和实现者。它自诞生以来,经过开发和扩充已成一种完全成熟的编程语言。现在C++已由ANSI、BSI、DIN、其他几个国家标准机构和ISO定为标准。ISO标准于1997年11月4日经投票正式通过。
C++标准演变了许多年。C++模板是近几年来对此语言的一种扩展,模板是根据类型参数来产生函数和类的机制,有时也称模板为“参数化的类型”。使用模板,可以设计一个对许多类型的数据进行操作的类,而不需要为每个类型的数据建立一个单独的类。标准模板库(Standard Tempalte Library,STL )和微软的活动模板库(Active Tempalte Library,ATL )都基于这个C++语言扩展。
C++标准可分为两部分, C++语言本身和C++标准库。C++标准库对于Visual C++是相当新的,实际上微软只是在发布Visual C++ 5.0时去除了一些“bug”。标准库提供了标准的输入/输出、字符串、容器(如矢量、列表和映射等)、非数值运算(如排序、搜索和合并等)和对数值计算的支持。应该说, C/C++包含了相对少的关键字,而且很多最有用的函数都来源于库,C++标准库实现容器和算法的部分就是STL。
STL是数据结构和算法的一个框架,数据结构包括矢量、列表和映射等,算法包括这些数据结构的查找、拷贝和排序等。1994年7月,ANSI/ISO C++标准委员会投票决定接受STL为C++标准库的一部分,这个建议是根据Alex Stepanov、Meng Lee和David Musser这三人的编程和软件库研究提出的。STL的产生是为了满足通用性的设计目标,而不是为了提高性能。
那么微软对C++标准的态度怎什么样?微软运行VC++与Plum-Hall C++,想比较得到的分数在92%和93%之间。为什么不是100%的一个原因是跟踪这个标准并同时建立一个编译器比较困难,微软也考虑了对现有编码兼容的重要性,有时他们不得不偏离标准以保持这个兼容性。
17.1.2 使用C++的原因
应该有充分的理由使用C++创建服务器组件,而不只是为了给上司一个好印象才使用C++。如果以前没用过C++,你必须要尽力学习。
1. 性能
性能有个两方面,算法速度和机器代码效率。一个算法可以定义为数据通过系统的概念化的路径,它描述一些点,在这些点上,数据能够被操作并可转换产生某个结果。例如,一个算法定义为获取一个字符串,计算字符串中的字符个数,并作为结果返回的过程。算法与
语言是独立的,所以在编程之前必须设计算法,编写一个快速程序的第一个步骤是设计良好的算法,能以最少的操作步骤得出问题的答案。第二个步是选择语言,这也影响程序的速度。
从性能的角度考虑,用汇编语言编写程序是最佳的选择,它是计算机能理解的自然语言。但是,几乎没有人用汇编语言编写完整的程序,因为这样做极其乏味。另一个最佳的选择是C语言。然而,由VC++提供的所有工具都产生C++,而不是C。使用VC++的向导可以生成大量的使用代码,而不必人工地编写代码。从编写程序的难易程度和程序的性能综合考虑, C++是最佳的选择。
C++性能良好,因为它被编译为机器代码。对于VBScript和Java等语言,代码在运行时由程序解释,而且每次运行程序时都要将代码转换为机器码,这样做效率比较低,不仅仅是已编译过的C++程序运行得较快,而且微软C++编译器已存在多年。这意味着微软的编译器程序员已经把许多优点集中到编译器上,以致于它能产生非常高效的机器码。因为C++是编译语言,而且非常自然,比VB更接近机器代码,所以由C++编译器产生的代码一定比VB的编译代码效率更高。
2. 错误处理
一个好的程序与一个伟大的程序的区别就是其是否具有良好的错误处理支持。实际上,如果在实现中首先进行错误处理,而不是在最后才进行,那么整个程序的开发和测试过程会更加完美。但是,错误处理只能与语言所支持的内容相一致。
VBScript具有基本的错误处理支持功能。在默认情况下,不能捕获VBScript中的错误。每次怀疑产生错误时,要调用On Error Resume Next功能,并检查Error对象。
而C++中的错误处理比较好,这是因为有“异常处理”,本章的后面部分将详细介绍。
3. 最小的依赖性
正如上面所说,C++是一种编译语言,即C++代码在执行之前已转换为机器码。只要此代码不依赖于外部的动态链接库(DLL),C++就可以在不需要安装额外程序的情况下移动到运行同样操作系统的其他机器和微处理器上,而移动Java程序时需要先安装Java运行期库。
4. 利用现有的代码
由于C和C++已经存在许多年了,现在有许多可利用的代码,你的服务器组件可以使用现有的C/C++代码或库。例如统计库和到老系统的C接口。
5. 最大化COM特征
COM与C++很接近,实际上, Don Box(COM的权威)在他的《Essential COM》一书的第一章写道:“COM就是更好的C++”。他说明了COM规范是如何从C++语言规律中产生出来的。通过理解C++,会对COM有更深的理解。
某些语言不能利用所有的COM特征,而在C++中,几乎可以使用所有的COM特征。
17.1.3 不使用C++的原因
知道什么时候使用C++是重要的,同样,知道什么时候不使用C++也是重要的。想像一下那些长期维护代码的人,如果他们中没有一些C++程序员支持C++,那么开发者们不得不把眼光转向另外一些他们熟悉的语言。
改变C++组件时,为了看到这些改变的结果,必须重新编译该组件代码,这会花费很长的开发时间。C++不能像ASP页面代码那样,只使用记事本,改变代码的一行,重新装载而得到结果。因此,如果某些工作需要经常变化(如原型),不要用C++。
在C++中,对一些致命的错误不能获得更多的保护,写一个使组件崩溃的代码是很容易的。这是为了提供快速代码而付出的代价, C++不会停下来去检查代码是否按设计运行能否使程序不崩溃依赖于开发者的技巧。如果在这方面花的时间较少或刚刚学习C++,最好不要使用C++。等到已经意识到C++中所有容易犯的错误,而且在检测组件之前花了许多时间,才可以使用C++,如果想很快、很容易地建立一个组件,而且也不考虑该组件的执行速度,那么使用VB吧!
17.1.4 把ASP技巧转到C++上
学习新东西的最好方法就是利用现有的技巧。对于ASP开发者来说,已经学习了C++所要求的许多技巧,特别是,JScript语法和ActiveX或COM的面向对象编程的概念。
1. JScript
大部分ASP开发者都用JScript在浏览器上使用DHTML。JScript的语法与C非常相似,所以,如果懂得JScript,那么就懂得基本的C语法。当然,只是C++语法的子集。C++有许多额外的语法来支持面向对象编程,这就是我们下一步要做的。
2. 面向对象编程
如果你在VB中使用过类(class),则对任何COM对象和文档对象模型(Document ObjectModel,DOM )都应熟悉,因为已经有了面向对象编程(OOP)的概念。在前面已经说过, C和C++的区别是C++支持面向对象编程。
简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。
计算机虽然功能十分强大。可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是一堆废铁,不会理会我们对它下达的“命令”。于是,我们要驯服它,只有通过一种方式——程序,这也是我们和计算机沟通的唯一方式。
程序也就是指令的集合,它告诉计算机如何执行特殊的任务。
写出程序后,再由特殊的软件将你的程序解释或翻译成计算机能够识别的“计算机语言”,然后计算机就可以“听得懂”你的话了,并会按照你的吩咐去做事了。因此,编程实际上也就是“人给计算机出规则”这么一个过程。
随计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。
电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。
计算机所能识别的语言只有机器语言,即由构成的代码。但通常人们编程时,不采用机器语言,因为它非常难于记忆和识别。
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。
汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。由于省略了很多细节,所以编程者也不需要具备太多的专业知识。
高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的VB、VC、FoxPro、Delphi等,这些语言的语法、命令格式都各不相同。
从二十世纪60年代以后,计算机得到了突飞猛进的发展。似乎历史上没有任何一门科学的发展速度超过了计算机的发展,无论硬件、软件、还是网络都以惊人的速度向前发展。软件的发展速度和硬件一样,二十世纪九十年代中国的软件业还不是很成熟,而现在大大小小 的软件企业四处耸立,共享软件网上随处可见。不断发展的技术需要不断变化的程序员,例如,如今Visual Basic可以快速构建Windows下的应用程序,程序设计方面的技术不断发展着,不断引进新的概念、新的方法,如从结构化的C开始,当面向对象的思想被提出后,出现了C++,微软在C++的基础上为使用户构建win32应用程序更加方便,推出了Visual C++。这也就需要程序员也要不断的更新自己的技术。
目前常用的基本程序语言的种类比较繁多,比较简单的有:Pascal、c语言、qBasic、 Fortran、Visual Basic等等。但前几种都是在DOS下进行编程的工具,Visual Basic是在 Windows下进行应用程序设计的编程工具,现在一般的计算机用户几乎都不再使用DOS了,因此我们通常会选择Visual Basic作为初学者的编程工具。Visual Basic是Windows应用程序设计中最容易上手的编程工具,学习步骤也比较容易被初学者接受。对于刚开始学习编程的初学者来说,还是选择Visual Basic,学习编程语言不能想象着一步登天,一步一个脚印的学习才是最佳方法。
===============================================
C语言是国际上广泛流行的、很有发展前途的计算机高级语言。它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件。
早期的操作系统等系统软件主要是用汇编语言编写的(包括 UNIX操作系统在内)。由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。为了提高可读性和可移植性,最好改用高级语言,但一般的高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作),例如:对内存地址的操作、位操作等)。人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。于是,C语言就在这种情况下应运而生了。
C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL 60。 1960年出现的ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。1963年英国的剑桥大学推出了CPL(CombinedProgram- ming Language)语言。CPL语言在ALGOL 60的基础上接近了硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richards对 CPL语言作了简化,推出了BCPL(Basic Combined Programming Language)语言。1970年美国贝尔实验室的 Ken Thompson以 BCPL语言为基础,又作了进一步简化,设计出了很简单的而且很接近硬件的 B语言( 取 BCPL的第一个字母),并用 B语言写第一个UNIX操作系统,在PDP-7上实现。 1971年在PDP-11/20上实现了B语言,并写了UNIX操作系统。但B语言过于简单,功能有限。1972年至 1973年间,贝尔实验室的 D.M.Ritchie在B语言的基础上设计出了C语言(取 BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练、接近硬件),又克服了它们的缺点(过于简单、数据无类型等)。 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。1973年,K.Thom- pson和D.M.ritchie两人合作把UNIX的90%以上用 C改写(UNIX第5版。原来的 UNIX操作系统是1969年由美国的贝尔实验室的 K.Thompson和D.M.Ritchie开发成功的,是用汇编语言写的)。
后来,C语言多次作了改进,但主要还是在贝尔实验室内部使用。直到1- 975年UNIX第6版公布后 ,C语言的突出优点才引起人们普遍注意。1977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》,使C移植到其它机器时所做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现。例如,VAX,AT&T等计算机系统都相继开发了UNIX。随着 UNIX的日益广泛使用,C语言也迅速得到推广。C语言和UNIX可以说是一对孪生兄弟,在发展过程中相辅相成。1978年以后,C语言已先后移植到大、中、小、微型机上,已独立于UNIX和PDP了。现在C语言已风靡全世界,成为世界上应用最广泛的几种计算机语言之一。
以1978年发表的UNIX第7版中的C编译程序为基础,Brian W.Kernighan和 Dennis M.Ritchie(合称K&R)合著了影响深远了名著《The C Programming Lan- guage》,这本书中介绍的C语言成为后来广泛使用的C语言版本的基础,它被称为标准C。1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C的发展和扩充 ,制定了新的标准,称为ANSI C。ANSI C比原来的标准C有了很大的发展。K&R在1988年修改了他们的经典著作《The C Progra- mming Language》 ,按照ANSI C的标准重新写了该书。1987年,ANSI C又公布了新标准--87 ANSI C 。目前流行的C编译系统都是以它为基础的。
==================================================
C++ 是脱胎自 C 语言的一种中级语言. 从计算机角度看, 它可以嵌入ASM等低端语言; 从面向对象的程序设计角度看, 它有具备OOP的三个基本特征 -- 抽象, 封装和继承; 同时从市场角度来看, 它又不是纯面向对象, 其实那些纯粹的面向对象语言的阵地只是在实验室.
比较C语言. C++ 的几个显著变化或者解决的问题就是
1. 名字空间的问题, 原始的C语言使用公共的名字空间, 这样无论是开发本人还是第三方团队都面临变量名字耗尽的问题. 而C++提供独立的名字空间, 而且对象的引入也为名字空间提供了进一步划分
2. 代码复用的问题, C语言使用函数库的方式或者DLL方式实现代码复用, 在接口稳定的前提下实现内部修改和数据及其实现的封装. C++提供了类库机制实现了具有层次的代码复用, 和多种继承机制, 同时重载等各种机制提供了进一步的复用实现. 使得类库和代码更加容易维护, 虽然建立类库在人员, 组织等各个方面还是比较麻烦的.
3. 安全机制. 因为有了类机制, 有一些初始化操作可以自动实现
4. 效率问题. 因为C语言本质上是站在计算机立场的非常注重效率的问题, 但是事物总是具备矛盾的两面, 过于偏重效率和软件危机的出现, 反而增加了程序设计的难度. 而OOA的现实世界角度的考虑问题更加贴近自然, 使得代码或者程序更加具备稳定性, 可扩展性和可维护性.
为此, 和经典物理同量子物理一样. C/C++ 今天在不同领域各自发挥着最大的效率.
没有谁是天生就会的,只要你肯学,没有基础肯定也能学会,因为所有的人都是从没有基础学起的
http://www.jade-china.net/data/2005/1229/article_31.htm
转自:伊图网[www.4ico.com]在阐述类的概念之前我们来先说说面向对象编程的概念:面向对象的程序设计(Object-Oriented Programming,简记为OOP)立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。它通过给程序中加入扩展语句,把函数“封装”进编程所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清晰、编写容易。说它是一场革命,不是对对象本身而言,而是对它们处理工作的能力而言。对象并不与传统程序设计和编程方法兼容,只是部分面向对象反而会使情形更糟。除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的麻烦多。有人可能会说PHP不是一个真正的面向对象编程的语言, PHP 是一个混合型 语言,你可以使用面向对象编程,也可以使用传统的过程化编程。然而,对于大型项目的开发,你可能想需要在PHP中使用纯的面向对象编程去声明类,而且在你的项目开发只用对象和类。随着项目越来越大,使用面向对象编程可能会有帮助,面向对象编程代码很容易维护,容易理解和重复使用,这些就是软件工程的基础。在基于Web的项目中应用这些概念就成为将来网站成功的关键。
对象(Object)是问题域或实现域中某些事物的一个抽象,它反映此事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。 关于对象要从两方面理解:一方面指系统所要处理的现实世界中的对象;另一方面对象是计算机不直接处理的对象,而是处理相应的计算机表示,这种计算机表示也称为对象。简单的来说,一个人就是一个对象,一个尺子也可以说是个对象。当这些对象可以用数据直接表示时,我们就称他为属性,尺子的度量单位可以是厘米,公尺或英尺,这个度量单位就是尺子的属性。
在PHP里我们可以定义一个类,类(Class)就是指变量与一些使用这些变量的函数的集合。PHP是一种松散类型的语言,所以通过类型重载不起作用,通过参数的个数不同来重载也不起作用。 有时在面向中重载构造函数非常好,这样你可以通过不同的方法创建对象(传递不同数量的参数)。在PHP中就是通过类来实现的。
在PHP中是通过类来完成信息封装的,在PHP中定义类的语法是:
<?php
class Class_name // 在面向对象编程类中,习惯上类的第一个字符为大写,并且必须符合变量的命名规则。
{
//函数与变量的集合
}
?>
在定义类时你可以按自已的喜好的格式进行定义,但最好能保持一种标准,这样开发起来会更有效些。
数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的。一个数据成员可以是一个整数,一个数组,一个相关数组(Associative Array)或者是一个对象。
下面是一个类定义的实际例子:
<?php
class Student
{
var $str_Name; //姓名
var $str_Sex; //性别
var $int_Id; //学号
var $int_English; //英语成绩
var $int_maths; //数学成绩
}
?>
这是一个很普通定义类的简单例子,用于显示学生的学习成绩,类名为Student,Student类包涵了一个学生的基本属性:姓名、性别、学号、英语成绩和数学成绩。
function我们称之为在类中被定义的函数,在函数中访问类成员变量时,你应该使用$this->var_name,其中var_name指的是类中被声明的变量,否则对一个函数来说,它只能是局部变量。 我们先定义一个Input()的函数,用来给实例中的对象赋以初值:
function Input ( $Name, $Sex, $Id, $Englis, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_Englis=$English;
$this->int_Maths=$Maths;
}
现在我们再定义一个叫“ShowInfo()”的函数,用于打印学生的基本情况:
function ShowInfo() //定义ShowInfo()函数
{
echo (“姓名:$this->str_Name<br>
”);
echo (“性别:$this->str_Sex <br>
”);
echo (“学号:$this->int_Id <br>
”);
echo (“英语成绩:$this->int_English <br>
”);
echo (“数学成绩:$this->int_Maths <br>
”);
}
而定义好的类则必须使用new关键词来生成对象:
$A_student=new Student;
例如我们要为一个名为$Wing的对象创建实例,并进行赋值,可以使用下面的代码:
$Wing =new Student; //用new关键词来生成对象
$Wing ->Input (“Wing”,”男”,33,95,87);
//分别输入Wing的姓名、性别、学号、英语成绩、数学成绩,其中姓名和性别是字符型变量,所以需要用双引号,其它为数值型变量则不需要。
通过下面这段完整的源代码,我们就可以很清楚的看到类在PHP是怎么被运用的:
<?php
class Student
{
var $str_Name;
var $str_Sex;
var $int_Id;
var $int_English;
var $int_maths;
function Input ( $Name, $Sex, $Id, $English, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_English=$English;
$this->int_Maths=$Maths;
}
function ShowInfo()
{
echo (“姓名:$this->str_Name<br>
”);
echo (“性别:$this->str_Sex <br>
”);
echo (“学号:$this->int_Id <br>
”);
echo (“英语成绩:$this->int_English <br>
”);
echo (“数学成绩:$this->int_Maths <br>
”);
}
}
$Wing = new Student;
$Wing->Input (“Wing”,”男”,33,95,87);
$Paladin = new Student;
$Paladin->Input (“paladin”,”女”,38,58,59.5);
$Wing->ShowInfo();
$Paladin->ShowInfo();
?>
执行结果应是这样的:
姓名:Wing
性别:男
学号:33
英语成绩:95
数学成绩:87
姓名:Paladin
性别:女
学号:38
英语成绩:58
数学成绩:59.5
PHP现有的版本较以前的版本在对面向对象编程的支持方面有了很大的改善,但支持的还不是很完整,不过现阶段PHP对面向对象编程语言提供的支持不但有利于我们设计程序的结构,对于对程序的维护也能提供很大的帮助。
一、VC是什么?学VC是学什么?
首先VC是一个软件(IDE集成开发环境)(编译、编辑、调试)
C和C++。但C++中的有些特性是不用的,例如I/O流,多态继承
WindowsSDK(软件开发工具)
VC的灵魂:MFC(微软基础类库)
ATL(ActiveX模板类库)
其他的SDK,如OpenGL,DirectX,ActiveMoive,DrawDib(WinG)
VC是许许多多技术的综合,就好象少林72般绝技,一般在应用中学会其中很少一部分就够了。我们的现在目的,其实不过是学一套少林长拳。这套长拳应包括:
1、养成一种严谨的软件开发习惯,熟悉软件工程的基本原则。
2、C语言基础
3、C++最基本内容:类、继承性、封装性、多态性的概念
4、如何用向导建立一个程序框架
5、设计菜单
6、设计工具条
7、设计和使用对话框,熟悉最常用的对话框控件:按钮、静态文本、编辑框等
8、知道怎样新建类、成员函数、成员变量、消息处理函数。
9、了解最常用的Windows消息:如WM_PAINT(重绘窗口),鼠标按下、弹起、移动,初始化对话框,等。
10、了解最简单的GDI(图形设备接口):写文字、画框、画点、画线、画圆,设置画笔、画刷。
11、熟悉最常用的MFC类:
CWnd
CDocument
CView
CDC
CDialog
CWinApp
CGdiObject及子类
CString、CPoint、CRect、CSize等简单数据类型
CFile
以上提到的这些内容,是每个人都会用到的内容。
二、MFC简介
上述主要内容都是与实际操作关系非常密切的,在此不可能讲清楚;而且,这些在一般的书里都会讲到。我主要将最重要的MFC介绍一下。
MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。
下面介绍最重要的MFC。
CWnd:窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。该类很大,一开始也不必学,知道就行了。
CDocument文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)
CView视图,负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在里面,你打交道最多的就是它。
CDC设备文本。无论是显示器还是打印机,都是画图给用户看。这图就抽象为CDC。CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。
CDialog对话框
CWinApp应用程序类。似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数InitInstance():初始化。
CGdiObject及子类,用于向设备文本画图。它们都需要在使用前选进DC。
CPen笔,画线
CBrush刷子,填充
CFont字体,控制文字输出的字体
CBitmap位图
CPalette调色板
CRgn区域,指定一块区域可以用于做特殊处理。
CFile文件。最重要的不外是Open(打开),Read(读入),Write(写)
CString字符串。封装了C中的字符数组,非常实用。
CPoint点,就是(x,y)对
CRect矩形,就是(left,top,right,bottom)
CSize大小,就是(cx,cy)对(宽、高)
三、用好MSDN和例子
作为提高,推荐看的例子有:
nHello最简单的程序框架
nScribble鼠标绘图。教程:编程基础,GDI
nDiblook图像处理最简单范例
nMFCIE因特网浏览器
nEnroll数据库
nDaoviewDao(数据访问对象)范例。树型和列视控件
nCubeOpenGL范例,画一个不断旋转的方块
nHierSvrOLE服务器
nOclientOLE包容器
nDrawcli鼠标绘图。也包括OLE。
nWordPad写字板。OLE
四、几点经验
A.为什么要用Windows而不是DOS编程
Windows编程并不比DOS编程难很多,只是在刚刚接触的时候感到头绪繁多,不知从何下手。实际上,如果你会C语言,你会发现Windows编程的难度并不比当年学C语言时大。DOS编程要想成为高手,也需要学习几百个函数(无论是TC、BC、MicrosoftC),并要深入了解汇编语言级的DOS功能调用。而现在在Windows下,付出相同的工作量,你却可以获得几倍的收益。如果你以前熟悉DOS编程,现在再搞Windows编程,只要两个星期肯定会感到巨大的优越性:在DOS下,每一件事都要自己干,而且还有64K内存、显示精度等的限制,实在是事倍功半了。
B.为什么要用VC而不是其他Windows编程语言
n大多数大型软件(包括Windows自己)都是用C、C++编的,所以可以利用的源代码特别多。例如Photoshop,就有VC的编程接口。的其他的语言都不如VC有历史优势。而且VC的开发工具特别多,从控件%B
楼主啊,你还是趁早回去耕田去吧~~~??ss
函数由函数返回值,函数名或形参表已经函数定义组成。如:
double get_sqrt(double a)
{
return sqrt(a);
}
函数声明就是指函数头,即:
double get_sqrt(double a);
注意,后面有分号。
为了编程方便,C/C++还有很多系统函数,供使用。
主程序必须要包括一个主函数,即:
int main()
{
//其它语句
return 0;
}
结构是用户自定义的一种数据类型,它不像数组,它可以包括多种数据成员。如:
struct Student
{
int age;
double height;
char name[20];
};
什么叫做函数?fA→B是什么意思?
如果你高中已经毕业,现在希望学习编程,那么首先你要复习一下高中数学关于函数的一章,然后看下面的文字。对于函数的使用者来说,他不关心f是如何实现,只要用x按照f所指出的对应关系进行计算或匹配,能够得到正确y,就认为f是正确的。对于函数的设计者来说,只要能够设计一种对应关系,达到要求,那么他...
编程入门自学python?
编程零基础应当如何开始学习Python? 1、学习的时候,我们都是要从Python的基础语法开始学习,了解什么是Python的变量什么是循环什么是函数,什么是模块。类等等。总之,基础是学习以后高级开发的基石。 这个阶段可以,选择一些经典书籍或者视频进行学习。 书籍可以看看《python快乐编程—基础入门》这本书,是针对零基础学生来编...
初中生自学编程,关于C语言,C#,C++,Visual C++。
编程语言是这样发展的:c——c++——visual c++——c#要学习的话,先学习c吧。也可以先学习c++,c和c++是不同的体系结构。函数是编程中必不可少的概念。它使得程序更有结构性,增加程序的可移植性。很是重要。不懂没关系,暂且不管,等学一阵子编程后,自会明白。
汇编语言和函数是什么?
汇编语言是相对于硬件(一般是单片机)的一种编程语言;而函数是在编程语言组合使用的一种可以调用的函数,这是二个完全不同的概念。编程语言特别丰富,我们经常看到的有VB、VC、VF、C++、C#等等,这些语言中有内部函数,编程人员也可以自定义函数。汇编语言是编程语言中的一种。
函数知识对于编程学习有什么重要性吗?
函数知识对于编程学习具有重要性。首先,函数是编程中的基本构建块之一,它们允许我们将代码分解为可重用的模块。通过使用函数,我们可以将复杂的问题分解为更小的子问题,并编写可重复使用的代码来解决这些子问题。这种模块化的方法可以提高代码的可读性和可维护性。其次,函数还有助于提高代码的复用性。
什么是函数?
函数的定义:给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表示。我们把这个关系式就叫函数关系式,简称函数。函数概念含有三个要素:定义域A、值域C和对应法则f。其中核心是对应法则f,...
怎么理解函数?
1821年,柯西从定义变量起给出了定义:“在某些变数间存在着一定的关系,当一经给定其中某一变数的值,其他变数的值可随着而确定时,则将最初的变数叫自变量,其他各变数叫做函数。”在柯西的定义中,首先出现了自变量一词,同时指出对函数来说不一定要有解析表达式。不过他仍然认为函数关系可以用多个解析式来表示,这是...
编程中的函数和数学中的函数一样吗??有关系吗?
计算机的函数是为了方便编程而使用的接口,如api函数 当然也可以制作自己使用的计算机函数
什么叫做函数
定义域A、值域B和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。函数,最早由中国清朝数学家李善兰翻译,出于其著作《代数学》。之所以这么翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,也即函数指一个量随着另一个量的变化而变化,或者说一个量。
什么是电脑编程啊?
编辑程序让电脑执行的过程就叫电脑编程。具有代表性的计算机语言有Java,BASIC C,C++,VB,VF,SQL,网页编程JSP,ASP,PHP ,软件是eclipse,Microsoft Visual Studio,Microsoft Visual Basic,Microsoft SQL Server,等等。Java是目前应用最广泛的编程语言之一,大学中则常常以C语言作为编程的入门语言, BASIC...
敖转香砂: 面向过程的编程中, 函数就是一组语句的集合 , 这一组语句(或者逻辑)用一对大括号({})包括起来, 一个函数由函数名称/参数列表/返回类型/函数体四部分组成 {} 用来将一组语句包含起来, 形成一个(子)生存周期, 他不一定非要使用在函数上 另外, 面向对象的编程中, 类中的函数又叫做"方法", 其实是一样的东西
依兰县18640734666: C语言中的函数是什么意思 - ?
敖转香砂: C语言中的函数 有两种意思. 一,如同数学中的函数,给了自变量(C语言叫参数),送回 计算结果 ( 有 return). 其它计算机语言中 的 function. 例如: int plus(int x,int y) {return x+y;} 参数 整型 x,y,送回两数之和 x+y 二,其它计算机语言中 的 “子程序”-- subroutine 它只是完成某些功能的 可调用的 程序块,不送返 值 (无 return). C语言中叫 void 型 函数. 例如:void p(int s) { int i; for (i=0;i<s;i++) printf("*"); } 打印 s 个 星号.无送返值.
依兰县18640734666: 什么叫编程函数?他有什么作用?c++的结构是怎样的? - ?
敖转香砂: 简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机虽然功能十分强大.可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是...
依兰县18640734666: 刚刚接触c语言,请问函数在编程中是什么意思 - ?
敖转香砂: 编程中的函数的英文名是function,而function有一个意思叫“功能”,所以编程中的函数一词可以理解为”实现某个功能的模块“.比如学下面这个求最大值的函数 int max(int a,int b) { return (a>b)?a:b; }它就是一个“功能”,或者说是一个“功能模块”,它所实现的功能就是将所给的两个值中更大的那个找出来并返回给调用它的地方.中文之所以称之为函数,原因可能是数学中的函数往往有输入和输出,比如y=2x,x是输入,给了输入,就会有一个输出y,而编程中的function也符合这一点(当然,输入不是必须的).而且将function译为功能感觉也怪怪的,要也是叫功能模块更符合一点.
依兰县18640734666: 什么是c语言函数?(介绍下大体c++函数是什么?)?
敖转香砂: 不管C还是C++,应该说编程语言的函数概念,是指一个代码段,一般用来实现一个功能,比如输出函数,输入函数等等.
依兰县18640734666: 编程语言中的函数是干什么用的? - ?
敖转香砂: 函数式编程语言有很多种定义,宽泛的认为支持高阶函数(higher-order function)就算函数式语言的话,大多数现代语言都是支持函数式编程的,例如C/C++,java,C#,lua,python,JavaScript,Scala等等.收紧一下定义的话,加入函数式语言要求的模式匹配、无副作用等要求,那么剩下的就是纯函数式语言,比较常见的有Haskell,Clean等.
依兰县18640734666: C语言函数有什么作用啊 - ?
敖转香砂: 函数的作用就相当于一台机器,这种机器的作用各不相同.不同的函数能完成不同的特定的功能.就像你放玉米进去,它出来的是爆米花一样.它就对玉米进行处理了.而c语言的函数就是你放入数据,它就会对数据进行处理.数组的作用就是存储数据的作用.是存储数据的类型的一种.计算机处理的就是数据.存储数据,你说重要不?就像电脑没有内存,它怎么运行啊?
依兰县18640734666: 怎么认识C语言函数是什么意思 - ?
敖转香砂: 有两种理解.(1)库函数是C语言的内部函数或自带函数,外部函数即程序员自定函数.(2)凡加写了extern 的函数是外部函数.第一种理解好懂:C语言的内部函数指的是C语言自带的函数,无论是动态链接的或静态链接的. 这些函数通过C语言...
依兰县18640734666: 编程里面的函数是干什么用的? - ?
敖转香砂: 函数是为方便程序的编写,而编写的一种代码块,以方便在其他的代码重用, 简化程序用,在有的程序叫方法.程序大多都是用函数组成的.
依兰县18640734666: c程序语言中,为何要调用函数?函数的作用是什么 - ?
敖转香砂: 不是C语言中要调用函数,是任何语言都要做的. 函数是对问题描述的最基本的分解方式,最简单的它可以使问题逐层简化,使工作可以分工协作.的确某些非常简单的操作是没必要再细化成函数,但并不是说该编译系统就只处理非常简单的操作,它还考虑到更复杂情况,所以加上强制使用函数方式编程也是合情合理的.