1.1 热身
#include<iostream>
using namespace std;
int main()
{
int a,b;
cout<<"input two number"<<endl;
cin>>a>>b;
cout<<a<<" "<<b<<endl;
return 0;
}
(1).第三行int 表示main函数的返回值为整数。第六行的作用是向操作系统返回0,如果程序不能正常运行则向操作系统返回一个非零值,一般为-1.
(2).注释://单行注释;/* ……*/多行注释
(3).cout是c++系统定义的对象名,称为输出流对象,<< 是插入运算符,<<将右侧“ ”内字符串等插入到输出队列cout中去。
(4).#include<iostream>是预处理命令,标准c++要求系统提供的头文件不带.h,用户自己编制的头文件可有后缀.h,c++可用c编译系统,可带带.h。
(5)c++标准库中的类和函数是在命名空间std中声明的。第二行意思是使用命名空间std,表示要用到std中的内容。c语言无命名空间,因此用带后缀.h的头文件时不必用using namespace std;
(6).cin称为输入流对象,>>是提取运算符,从输入设备中(如键盘)提取数据送到输入流cin中去。
(8).键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。
1.2类
class Student
{
private: //私有部分
int num; //学生学号 //私有变量
int score; //学生分数
public:
void setdata() //公用函数
{
cin>>num;
cin>>score;
}
void display() //定义公用函数display,输出信息
{
cout<<"num="<<num<<endl;
cout<<"score="<<score<<endl;
}
};
Student stud1,stud2; //定义Student类的对象
stud1.setdatd(); //通过对象调用类内方法
stud2.diaplay();……
(1).一个类是由一批数据(属性)以及对其操作的函数(方法)组成。
(2).数据和函数分为两大类。私有的private:只能被本类中的函数调用,不能被类以外调用。共用的public:可被类内函数调用,也可被类外语句调用。
(3).类不占实际存储空间,对象占实际存储空间。
(4). “.”是成员运算符。
1.3 const定义常变量
#define PI 3.14149
const float PI=3.14159
(1).#define PI 3.14159,实际上只是在愈编译时进行字符转换,把程序中出现字符串PI的全部位置换为3.14159,PI不是变量,没有类型,不占存储单元。但define不靠谱
#define R a+b R*R并不是(a+b)*(a+b),而是a + b * a + b。
(2).const 具有变量属性,具有数据类型,占用存储单元,有地址,可用指针,变量值固定不变。
1.4函数重载
输出数中最大的数,可设计为:
int sort(int a,int b,int c);
float sort(float a,float b,float c);
long sort(long a,long b);
输入三个数,系统根据数据的类型或数据的个数选择相应的函数。函数重载即一个函数名多用,参数个数和类型可以都不同,参数个数和类型必须至少有其中之一不同,函数返回值也可不同。不允许参数类型和个数都相同而返回类型不相同。
1.5函数模板
template <typename T> 或 template<class T>
例:输出数中最大的数,可设计为:
int sort(int a,int b,int c);
float sort(float a,float b,float c);
long sort(long a,long b,long c);
用函数模板可为:
template<typename T>;
T sort(T a,T b,T c)
{
if(b > a) a = b;
if(c > a) a = c;
return a;
}
函数模板只适用于函数的参数个数相同而类型不同的情况。
1.6有默认参数的函数
float area(float r = 6.5); //函数声明
area(); //函数调用时相当于area(6.5)
float volume(float h,float r = 12.5); //函数声明
volume(45.6); //函数调用,相当于volume(45.6,12.5);
volume(34.2,10.4) //函数调用,相当于volume(34.2,10.4);
实参与形参的结合是从左至右,指定默认值的参数必须放在形参列表的最右端。
注:一个函数不能既作为重载函数,又有默认参数的函数。
例:
int max(int a,int b,int c=100) ; //函数声明
int max(int a,int b) ; //函数声明
max(5,32) 对于此函数系统就不知到该调用哪个了。
1.7变量的引用
1.
int a;
int &b = a; //声明b是一个整形变量的引用变量,他被初始化为a
(1).&:是引用声明符,此时不带表地址,对变量声明一个引用并不另开辟存储单元,b和a都代表同一变量单元,共享同一内存。在声明一个引用时,必须同时初始化,即声明它代表那一个变量。由于引用不是独立的变量,编译系统不给他单独分配存储单元,因此在建立引用时只有声明,没有定义,只是声明它和原有的某一变量的关系。
(2).
int &b; //错误,没有指定b代表哪个变量
float a; int &b = a; //错误,b是一个指向整形的变量的别名,而a是float形
(3)
int &a = p; // &是引用声明
int p = & a; // &是取地址符
(4)引用初始化后不能再被重新声明为另一个变量的名。
2.引用作为函数参数
(1).将变量名作为实参:传给形参的是变量的值,传递是单向的,形参值不传给实参,形参和实参不是同一存储单元。
(2).传递变量的指针:形参得到一个变量地址,形参指针变量指向实参变量单元。例:
void swap(int *p1, int *p2); // 函数声明
swap(& i,& j) //函数调用
*p1 和 i ,*p2 和 j 共用一个存储单元
(3).传送变量的别名:
void swap (int &a, int &b);/// 函数声明
swap(i , j); //函数调用
实参传给形参是实参的地址,即形参a和i具有同样地址,a和i共享同一单元。
两种传递数据方式:传值方式调用(实参传给形参值);引用方式调用(实参的地址传给形参)
指针与引用区别:指针变量需要开辟存储空间,可以为空。引用是变量的别名,不能为空。
3.进一步说明
(1).不能建立void类型的引用
(2).可将变量的引用的地址赋给一个指针,int a;int &b = a;int *p = &b; 但不能定义指向引用类类型的指针变量,int *p = &a;
(3).可以建立指针变量的引用:int i;int *p = &i;int &pt = p;
(4).用const 对引用加以限定,不允许改变引用的值。
int i = 5;
const int &a = i; //声明常引用,不允许改变a的值
a = 3 ; //错误,a的值不能改变。
(5).可用常量或表达式对引用进行初始化,但必须用const作声明。
int i = 5;
const int &a = i + 3; //系统内部:const &a = i + 3;转换为int temp = i + 3;const int &a = temp;
1.8内置函数
内置(内嵌/内联)函数:嵌入到住函数中的函数。
inline int max(int a,int b,int c) //关键子inline,内置函数的声明方式。
例:
#define power(x) x*x 则 power(2) = 4 power(1+1) = 3
inline int power(int x) { return x*x } power(1+1) = 4 避免宏定义的副作用
内置函数可节省运行的时间。循环switch,递归,静态存储不能用内置函数
1.9作用域运算符
"::"作用域运算符
在main函数中局部变量将屏蔽全局变量
float a = 12.33;
int main()
{
int a = 9;
cout<<a<<endl; //输出局部变量a的值9
cout<< ::a <<endl; // 输出全局变量a的值12.33
}
2.0 new/delete
float * p = new float(3.1458);
delete p;
new 类型 【初值】
delete 【】 指针变量
new 和 delete 是运算符,不是函数。malloc 和 free 是c语言利用库函数分配和撤销内存空间的。
2.1c++的编写合实现
1.用c++语言编写程序:高级语言编写程序-------源程序(source program) .cpp文件
2.对源程序进行编译:编译器把源程序翻译成二进制形式的目标程序(object program).obj或.o文件
3.将目标文件内链接:所有目标程序和系统的库文件以及系统提供的其他信息链接,生成可执行二进制文件.exe
4.运行程序
5.分析运行结果