C++基本语法

C++保留了 C 语言原有的所有优点,增加了面向对象的机制。
C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,

C++对 C 的―增强‖,表现在两个方面:
(1) 在原来面向过程的机制基础上,对C语言的功能做了不少扩充。
(2) 增加了面向对象的机制。

#include <iostream> //包含头文件 iostream
using namespace std; //使用命名空间 std
int main( )
{
    int a, b, sum;
    cin>>a>>b; //输入语句
    sum=a+b;//赋值语句
    cout<<′′a+b=′′<<sum<<endl; //输出语句

    return 0;
}

"#include <iostream>",这不是 C++的语句,而是 C++的一个预处理命令,"using namespace std;"的意思是"使用命名空间std"。 C++标
准库中的类和函数是在命名空间 std 中声明的,因此程序中如果需要用到 C++标准库(此时就需要用#include 命令行),就需要用"using namespace std;"作声明,表示要
用到命名空间 std 中的内容。
-----------------------------------------------------------------

#include <iostream>
using namespace std;
int main( )
{
    int max(int x,int y);//对 max 函数作声明

    int a,b,c;
    cin>>a>>b;
    c=max(a,b); //调用 max 函数
    cout<<′′max=′′<<c<<endl;
    return 0;
}

int max(int x,int y)//定义 max 函数
{
    int z;
    if(x>y) {
        z=x;
    } else {
        z=y;
    }

    return(z);
}

和C语言一样,如果被使用的函数在main函数之后,那么在使用这个函数前必须对这个函数进行声明。
如果被使用的函数在main函数之前,则不需要声明

-----------------------------------------

C++的源程序是以.cpp 作为后缀的(cpp 是 c plus plus 的缩写)。

#define PRICE 30 //注意这不是语句,末尾不要加分号
这是宏定义,不是语句,所以不要加分号

变量:包含变量名,变量内容,变量存储单元。
从计算机实现的角度看,变量的特征是存在一个以变量名命名的存储单元

C++数据运算转换和C语言一样

---------------------------------------

C++强制转换和C一样
long a = 5;
int b = (int) a;
将a转换成int类型给b,但是a仍为long类型

-----------------------------------------

 二元运算符
+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=
其中后5种是有关位运算的。
C++之所以采用这种复合运算符,一是为了简化程序,使程序精炼,二是为了
提高编译效率(这样写法与“逆波兰”式一致,有利于编译,能产生质量较高的目标
代码)。 专业的程序员在程序中常用复合运算符
-------------------------------------------------

cin>>c1>>c2>>a>>b;
cout<<c1<<c2<a<<b;

在输入流与输出流中使用控制符
有时人们在输入输出时有一些特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向
右对齐等。C++提供了在输入输出流中使用的控制符(有的书中称为操纵符)。
需要注意的是: 如果使用了控制符,在程序单位的开头除了要加 iostream 头
文件外,还要加 iomanip 头文件。

double a=123.456789012345;对 a 赋初值
(1) cout<<a;输出: 123.456
(2) cout<<setprecision(9)<<a;输出: 123.456789
(3) cout<<setprecision(6);恢复默认格式(精度为 6)
(4) cout<< setiosflags(ios∷fixed);输出: 123.456789
(5) cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;输出: 123.45678901
(6) cout<<setiosflags(ios∷scientific)<<a;输出: 1.234568e+02
(7) cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a; 输出: 1.2346e02
下面是整数输出的例子:
int b=123456;对 b 赋初值
(1) cout<<b;输出: 123456
(2) cout<<hex<<b; 输出: 1e240
(3) cout<<setiosflags(ios∷uppercase)<<b;输出: 1E240
(4) cout<<setw(10)<<b<<','<<b; 输出: 123456,123456
(5) cout<<setfill('*')<<setw(10)<<b;输出: **** 123456
(6) cout<<setiosflags(ios∷showpos)<<b;输出: +123456
---------------------------------------------
如果在多个 cout 语句中使用相同的 setw(n),并使用 setiosflags( ios∷right),
可以实现各行数据右对齐,如果指定相同的精度,可以实现上下小数点对齐。

#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
    double a=123.456,b=3.14159,c=-3214.67;
    cout<<setiosflags(ios∷fixed)<<setiosflags(ios∷right)<<setprecision(2);
    cout<<setw(10)<<a<<endl;
    cout<<setw(10)<<b<<endl;
    cout<<setw(10)<<c<<endl;
    return 0;
}

输出如下:
123.46 (字段宽度为 10,右对齐,取两位小数)
3.14
-3214.67
-----------------------------------------------------

C和C++中 switch()内允许任何表达式

java中只能为int或可以自动转换为int的类型 另外还有String类型

-------------------------------------------------------
inline function
C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到
主调函数中,而不是将流程转出去。这种嵌入到主调函数中的函数称为内臵函数
(inline function),又称内嵌函数或者内联函数。

inline int max(int,int, int);//函数的预先声明可以放在main函数里面

inline int max(int a,int b,int c)
{
    if(b>a) a=b;//求 a,b,c 中的最大者
    if(c>a) a=c;
    return a;
}

可以在声明函数和定义函数时同时写 inline,也可以只在其中一处声明inline,效果相同,都能按内联函数处理。
使用内联函数可以节省运行时间,但却增加了目标程序的长度。 因此一般只将规模很小(一般为 5 个语句以下)
而使用频繁的函数(如定时采集数据的函数)声明为内联函数。

内联函数中不能包括复杂的控制语句,如循环语句和 switch 语句。

应当说明: 对函数作 inline 声明,只是程序设计者对编译系统提出的一个建
议,也就是说它是建议性的,而不是指令性的。
------------------------------------------------------------------------------------------------------

function template
C++提供了函数模板(function template)。 所谓函数模板,实际上是建立一
个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。 这
个通用函数就称为函数模板。

凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中
定义一次即可。 在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,
从而实现了不同函数的功能。

#include <iostream>
using namespace std;
template<typename T> //模板声明,其中 T 为类型参数
T max(T a,T b,T c) //定义一个通用函数,用 T 作虚拟的类型名
{
    if(b>a) a=b;
    if(c>a) a=c;
    return a;
}

int main( )
{
    int i1=185,i2=-76,i3=567,i;
    double d1=56.87,d2=90.23,d3=-3214.78,d;
    long g1=67854,g2=-912456,g3=673456,g;
    i=max(i1,i2,i3); //调用模板函数,此时 T 被 int 取代
    d=max(d1,d2,d3); //调用模板函数,此时 T 被 double 取代
    g=max(g1,g2,g3); //调用模板函数,此时 T 被 long 取代
    cout<<′′i_max=′′<<i<<endl;
    cout<<′′f_max=′′<<f<<endl;
    cout<<′′g_max=′′<<g<<endl;
    return 0;
}

  定义函数模板的一般形式为 template < typename T> 或 template <class T>
类型参数可以不只一个,可以根据需要确定个数。 如template <class T1,typename T2>
---------------------------------------------------------------------------------------------
有默认参数的函数:可以避免部分重载函数
float area(float r=6.5);
指定 r 的默认值为 6.5,如果在调用此函数时,确认 r 的值为 6.5,则可以不必给
出实参的值,如
area( );//相当于 area(6.5);
如果不想使形参取此默认值,则通过实参另行给出。 如
area(7.5);//形参得到的值为 7.5,而不是 6.5

这种方法比较灵活,可以简化编程,提高运行效率。
如果有多个形参,可以使每个形参有一个默认值,也可以只对一部分形参指
定默认值,另一部分形参不指定默认值。 如有一个求圆柱体体积的函数,形参 h 代
表圆柱体的高,r 为圆柱体半径。 函数原型如下:
float volume(float h,float r=12.5); //只对形参 r 指定默认值 12.5
函数调用可以采用以下形式:
volume(45.6); //相当于 volume(45.6,12.5)
volume(34.2,10.4) //h 的值为 34.2,r 的值为 10.4
实参与形参的结合是从左至右顺序进行的。 因此指定默认值的参数必须放
在形参表列中的最右端,否则出错。
例如:
void f1(float a,int b=0,int c,char d=′a′); //不正确
void f2(float a,int c,int b=0, char d=′a′); //正确
----------------------------------------------------------------


 

posted @ 2015-03-30 16:35  牧 天  阅读(512)  评论(0)    收藏  举报