关闭

c++学习笔记(一)

标签: c++
728人阅读 评论(0) 收藏 举报
分类:

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中去。

(7).endl表示行结束,与'\n'作用相同,end of line。

(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.分析运行结果


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:88339次
    • 积分:1699
    • 等级:
    • 排名:千里之外
    • 原创:77篇
    • 转载:6篇
    • 译文:1篇
    • 评论:10条