CPP

Admin in 百科 2024-03-24 09:44:26




程序设计语言[编辑本段]CPP是程序设计语言C++的另一种书写形式
它是“C Plus Plus”的简称。是继C语言之后又一种计算机编程语言,C++编程语言同时支持所有的C语言语法。
C++和C相似:但C是面向过程的程序设计语言,而C++是面向对象的程序设计语言,不过C++语言保持了对C语言的兼容,也就说是在C++程序可以不用修改的插入C语言代码。
cpp是用C++语言编写的源代码文件的后缀名。它对类的强大支持可以使它编写出更优质的程序。

酪蛋白磷酸肽[编辑本段]CPP(酪蛋白磷酸肽) 是从牛乳酪蛋白通过生物技术制得的一种新型功能性食品添加剂,按日本厚生省分类属于氨基酸系列。CPP是有磷酸基的肽,它的蛋白前体是α、β-酪蛋白,其生理功能是促进钙、锌、铁的吸收,抗蛀牙、提高动物受精能力,调节血压。然而在人的小肠下部,pH一般呈中性到弱碱性,在此条件下,矿物质不易溶解而产生沉淀,导致对钙的吸收率大大下降。因此,仅仅增加膳量中补钙并不能提高人体对钙的吸收率。CPP在小肠内能与钙结合而形成钙盐,这些肽的钙盐在生理pH下具有非常好的溶解性,这样就促进了人体对钙的吸收。目前,CPP已被公认为应用面广泛的功能性食品添加剂,它能促进婴幼儿与青少年的健康成长和提高中老年人的保健。


船舶专用语
CPP (Controllable pitch propeller ) 可调螺旋桨
【概述】
C++,这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 14882-1998。C++是具有国际标准的编程语言,通常称作 ANSI/ISO C++。1998年是C++标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C++0x。遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2004年)只有少数几个编译器完全符合这个标准(这么说也是不完全正确的,事实上,至今为止没有任何一款编译器完全支持ISO C++)。
另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C++。根据《C++编程思想》(Thinking in C++)一书所评述的,C++与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C++ 完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。


【子语言】
根据Effective C++第三版第一条款的描述,现在C++由以下四个“子语言”组成:
1、C子语言。C++支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C++标准文献)。
2、面向对象的C++。C++首先作为一门面向对象的语言而闻名,这个特点在这里不再详述。
3、泛型编程语言。C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。
4、STL(C++标准模板库)。随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的naive代码低些,但是其安全性与规范性使它大受欢迎。


【语言发展】
C++语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。


【C++的设计原则】
• C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。
• C++设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。
• C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。
• C++设计成尽可能与C兼容,籍此提供一个从C到C++的平滑过渡。
• C++避免平台限定或没有普遍用途的特性。
• C++不使用会带来额外开销的特性。
• C++设计成无需复杂的程序设计环境。
出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,C++之父的《C++语言的设计和演化》 里做了详尽的陈述。

【C++的Hello World程序】

在使用兼容C89标准(也称为ANSI C)的编译器时,下面这个程序显示“Hello, world!”然后结束运行:
(事实上这并不是符合98标准[ISO C++]的C++程序,而且在多数编译器上这个程序也不能运行,若要在比较旧的编译器上编译该程序,应将iostream改为iostream.h)
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
return 0;
}
在使用兼容C++99标准(ISO/IEC 14882-1998)的编译器时,下面的程序也是可以的:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
return 0;
}
根据ISO C++的规定,main函数的形式只能是
int main()
{
...
}
以及
int main(int argc,char * argv[])
{
...
}
尽管如此,但在大部份(其实是在Windows平台下的大部分)编译器上,
void main()
{
...
}
也被支持。


【C++程序员的数量】

分析机构EvansData定期对开发人员展开调查,其调查结果与Stroustrup提出的C++正在扩张的说法相违背。EvansData的数据显示,以C++为工具的开发人员在整个开发界所占的比例由1998年春天的76%下降至2004年秋的46%。
Forrester最新的调查显示,C++、微软VisualBasic和Java是众多公司产品体系的首选语言。对100家公司的调查显示,C/C++、VisualBasic和Java在产品体系中的使用比例分别是59%、61%和66%。
传统上认为,C++相对于目前一些新潮的语言,如Java、C#,优势在于程序的运行性能。这种观念并不完全。如果一个人深信这一点,那么说明他并没有充分了解和理解C++和那个某某语言。同时,持有这种观念的人,通常也是受到了某种误导(罪魁祸首当然就是那些财大气粗的公司)。对于这些公司而言,他们隐藏了C++同某某语言间的核心差别,而把现在多数程序员不太关心的差别,也就是性能,加以强化。因为随着cpu性能的快速提升,性能问题已不为人们所关心。这叫“李代桃僵”。很多涉世不深的程序员,也就相信了他们。于是,大公司们的阴谋也就得逞了。
一般认为,使用Java或C#的开发成本比C++低。但是,如果你能够充分分析C++和这些语言的差别,会发现这句话的成立是有条件的。这个条件就是:软件规模和复杂度都比较小。如果不超过3万行有效代码(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量和复杂度的增加,C++的优势将会越来越明显。
造成这种差别的就是C++的软件工程性。在Java和C#大谈软件工程的时候,C++实际上已经悄悄地将软件工程性提升到一个前所未有的高度。这一点被多数人忽视,并且被大公司竭力掩盖。
语言在软件工程上的好坏,依赖于语言的抽象能力。从面向过程到面向对象,语言的抽象能力有了一个质的飞跃。但在实践中,人们发现面向对象无法解决所有软件工程中的问题。于是,精英们逐步引入、并拓展泛型编程,解决更高层次的软件工程问题。(实际上,面向对象和泛型编程的起源都可以追溯到1967年,但由于泛型编程更抽象,所以应用远远落后于面向对象)。

【C++语言的应用】

哪些程序是用C++写的:
主流的3种操作系统Windows,Linux,Unix,内核都是用C语言和汇编写的,上层高级特性是用C++写的。
《魔兽世界》等几乎所有的网络游戏,百度搜索引擎(Baidu.com),我们所用的大多数软件都是用C++写的(硬件也有很多用到C++的)。

C++之父Bjarne Stroustrup列举的C++应用:
Amazon.com:Software for large-scale e-commerce
Apple: OS X is written in a mix of language, but a few important parts are C++. The two most interesting are
AT&T:The largest US telecommunications provider.
o provisioning systems
o systems for rapid network recovery after failure
Autodesk: A large number of major number of application in the CAD domain
Ericsson:o server platform.
o TDMA-CDMA HLR
o GSM-TDMA-CDMA mobility gateway
Google: web search engine, etc。
HP: Here is a tiny fraction of HP''s C++ apps:
o C, C++, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C++ code).
IBM: o OS/400.
o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors.
Intel:o Vtune performace analysis software
o compilers and optimizers
o lots of chip design and manufacturing software
JPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C++ on Mars! Also lots of supporting software "on the ground" (i.e. Earth).
Microsoft:o Windows XP
o Windows NT (NT4 and 2000)
o Windows 9x (95, 98, Me)
o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook)
o Internet Explorer (including Outlook Express)
o Visual Studio
o SQL
Mozilla: Firefox browser and Thunderbird mail client (open source)
MySQL: MySQL Server (about 250,000 lines of C++) and MySQL Cluster. Arguably the world''s most popular open source database
Nokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node).
o MSC/HLR
Sun: o The HotSpot Java Virtual Machine is written in C++
Symbian OS: rationale: "[...] using C++ for all system code, from the kernel upwards." This is one of the most widespread OS''s for cellular phones
KDE from linux is written in C++.
telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。
telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。telephone systems: I think it would be almost easier to list the systems which aren''t written in C++。

【C++编程技巧】
 一、使用new和delete进行动态内存分配和释放
  运算符new和delete是C++新增的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点:
  (1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。
  (2)自动地返回正确的指针类型,不用进行强制指针类型转换。
  (3)可以用new对分配的对象进行初始化。
  使用例子:
  (1)int p;
    p=new int[10]; //分配一个含有10个整数的整形数组
    delete[] p; //删除这个数组
  (2)int p;
    p=new int (100);//动态分配一个整数并初始化
  二、使用inline内连函数替代宏调用
  对于频繁使用的函数,C语言建议使用宏调用代替函数调用以加快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望的副作用。例如宏:#define abs(a) ((a)<0?(-a):(a)), 当使用abs(I++)时,这个宏就会出错。
  所以在C++中应该使用inline内连函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。
  使用内连函数只须把inline关键字放在函数返回类型的前面。例如:
inline int Add(int a,int b);//声明Add()为内连函数
  这样编译器在遇到Add()函数时,就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。
  三、使用函数重载
  在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C++中,函数名相同而参数不同的两个函数被解释为重载。例如:
void PutHzchar str  //在当前位置输出汉字
void PutHzint xint ychar str  //在x,y处输出汉字
  使用函数重载可以帮助程序员处理更多的复杂问题,避免了使用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。
  四、使用引用(reference)代替指针进行参数传递
  在C语言中,如果一个函数需要修改用作参数的变量值的时候 ,参数应该声明为指针类型。例如:
   void Addint a  a ++
  但是对于复杂的程序,使用指针容易出错,程序也难以读懂。在C++中,对于上述情况 可以使用引用来代替指针,使程序更加清晰易懂。引用就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行操作。例如使用引用的函数定义为:
  void Addint a  a++  //a为一个整数的引用
  这个函数与使用指针的上一个函数的功能是一样的,然而代码却更为简洁和清晰易懂。
五、使用缺省参数
  在C++中函数可以使用缺省参数,例如:
 
void PutHzxychar strint x=-1int y=-1; 
 if x==-1  x=wherex; 
if y==-1  y=wherey; 
movetoxy 
PutHzstr 
  可以有两种方式调用函数PutHzxy(),例如:
 
PutHzxy″C++语言″; //使用缺省参数在当前位置输出
PutHzxy″C++语言″1010 ;//没有使用缺省参数
  通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在C++的代码中都大量地使用了缺省参数。
  需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。
  例如:
 
void PutHzxychar strint x=-1int y=-1  //正确
void PutHzxyint x=-1int y=-1char str //错误
  六、使用模板和BIDS
  从Borland C++ 3.1中还引入模板(template)的功能,通过模板Borland C++实现了功能强大的BIDS(Borland International Data Structures)。使用BIDS可以不编程实现存储任何数据类型的数组、链表、堆栈、队列等数据结构。
  下面的例子实现了一个存储整型变量的堆栈:
 
typedef BI_StackAsVector intstack
main 
instack is //定义一个整型变量的堆栈
forint I=0I<10I++ 
 is.pushI //10个数压栈
forI=0I<10I++ 
 cout< 
 
  通过语句is.push(),is.pop()可以对堆栈进行操作。

【C++的集成开发环境】
1.visual C++
2.visual studio
3.Boland C++
4.C++ Builder
5.eclipse
6.Dev-C++
对于C++学习者,Bjarne Stroustrup 自荐的2本书:
《C++语言的设计和演化》 2001 裘宗燕 译
《C++ 程序设计语言 (特别版)》 2002 裘宗燕 译









免责声明:本站文字信息和图片素材来源于互联网,仅用于学习参考,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:chuangshanghai#qq.com(把#换成@)

cpp
-- End --