C++学习笔记

以前虽然学过C++,但是感觉就是C的风格,现在开始认真学习一下C++了。

 

1.输入输出流

如果不加using namespace std,则cin和cout前面需要加std::

像这样:

#include<iostream>
//using namespace std;

int main(){
    int a;char buf[50];
    std::cin>>a>>buf;
    std::cout<<a<<buf<<std::endl;
    return 0;
}
View Code

(加了的话,std::可写可不写)

 

2.动态内存分配

C语言通过malloc和free进行动态内存的分配和回收

C++通过new和delete进行。(int是一种type)

new的第一种使用方法:

    int *p;
    p=new int;
    if(p==NULL) printf("Allocation Failure!\n");
    else {
        *p=2333;
        cout<<*p;
        delete p;
    }
View Code

还可以用new运算符初始化单个数据的存储区:

    int *p;
    p=new int(2333);
    if(p==NULL) printf("Allocation Failure!\n");
    else {
        cout<<*p;
        delete p;
    }
View Code

`动态分配一维数组的存储空间:

    type *p;
    p=new type[num];        //num是数组元素的个数
    delete []p;             //中括号代表以数组的方式删掉
View Code

 

3.函数的定义和调用

Attention: 不能以形参名字或参数返回类型的不同来区分函数。即,如果两个函数名字相同、形参数量以及类型相同,但是一个是int,一个是float,仍然不可。

C++也有带默认型参数的函数。在定义时预先声明默认的形参值,在调用时若给出实参,则用实参初始化形参,否则采用预先声明的形参值。

默认形参值必须按照从右向左的顺序声明,在有默认值的形参右边,不能出现无默认值的形参。

默认形参值可以在函数原型中给出。

在不同的作用域内,允许说明不同的默认形参值。(有点类似局部变量与全局变量的覆盖关系)

 

4.内联函数

用inline定义的函数-内联函数

在编译时在调用func的地方用函数体进行了替换,所以程序执行时会减少调用开销。

并非所有函数都需要定义为内联函数-一般只将那些频繁被调用的,且函数体较小(只有几条语句)的函数定义为内联函数。

内联函数不允许有循环语句和switch语句,否则就当普通函数来处理了。

 

5.常量

宏定义#define 和 const 的区别:#define只在编译时完成宏替换,在程序运行期间不占内存空间;const定义的常量在程序运行期间占据内存空间(只是用const来指明该内存空间的只读约束)

 

6.引用

C++独有。

1.独立引用

    int m=8,k;
    int &pm=m;              
    /*  
        pm是m的引用,代表同一个内存单元
        在声明独立引用时必须对它初始化,这种情况下的别名绑定是永久的。
    */    
View Code

 

2.引用作为函数参数

传递引用比传递指针效率更高。

(eg: swap函数)

指针传递:

void swap1(int *a,int *b){                  //指针传递
    int t=*a;
    *a=*b;
    *b=t;
}

    swap1(&a,&b);printf("%d %d\n",a,b);
View Code

引用传递:

void swap2(int &a,int &b){
    int t=a;
    a=b;
    b=t;
}

    swap2(a,b);printf("%d %d\n",a,b);
View Code

 

返回引用:函数返回引用,实际上返回的是一个存储单元(变量),即“左值”。

       如果一个函数返回引用,那么函数调用可以出现在赋值号的左边。

eg:

int &f(int *pint){
    return *pint;
}

int main(){
    int a=10,b;
    b=f(&a)*10;
    f(&a)=88;
    cout<<a<<' '<<b<<endl;
View Code

输出:88 100

 

7.类与对象

1.类是一种抽象数据类型,声明形式如下:

class ClassName{

  数据成员;        //用于表达数据抽象

  函数成员;        //用于表达行为抽象

};              //关键字class用于声明一个类类型

eg:声明类举例:

class Clock(){
    int Hour,Minute,Second;
    void SetTime(int h,int m,int s);
    void ShowTime();
};
View Code

 

访问控制

数据封装的目的就是信息隐藏。为了达到信息隐藏,在C++类中,并非所有的成员都是对外可见的。(或者说,是类外可以访问的)

访问控制属性有:public、protected、private

class ClassName{

  public:

      公有成员  //任何类内、类外函数都可以访问公有数据和函数

  protected: 

      保护成员  //与private类似,其差别表现在继承与派生时对派生类的影响不同

  private:

      私有成员  //只允许本类中的函数访问,而类外的任何函数都不能访问

};

 

posted @ 2020-10-08 23:13  YWQQwQ  阅读(139)  评论(0)    收藏  举报