C++基础知识

来源:互联网 发布:道路照度计算软件 编辑:程序博客网 时间:2024/05/29 16:29

1、命名空间

    a.为什么要有命名空间?
        解决命名冲突问题。
    b.怎么定义命名空间?
        namespace(关键字)
        格式:namespace 命名空间的名字{
                //命名空间的成员
                //成员可以是函数也可以是变量
            }    //此处无分号
        demo:  namespace my_name_sp{
                int num;
                char ch;
                void fun()
                {
                    printf("fun\n");
                }
            }    //此处无分号
    c.怎么使用命名空间中的成员?
        命名空间名字::访问的成员
        demo:my_name_sp::fun();
            my_name_sp::num = 10;
    
    d.作用域运算符::
        可以指示变量的位置,可以指定访问的变量的位置
        1.当全局变量和局部变量重名时,可以使用作用域运算符访问全局变量
            ::num  //访问的全局num
            注意:即使支持访问全局变量,但是最好不要有全局变量,即使定义全局变量,也最好不要和局部变量重名。
        2.命名空间其实可以理解为自定义的作用域



2、输入输出

    a.
        C++的输出输入是由对象完成的,在iostream流中有4个对象完成输入输出功能
        常用的两个为cin和cout
    
    b.什么是流?
        流强调的是,数据是不间断的,有序的
        随着时间流逝,数据的输入与输出是有序的
    
    c.cout  标准输出
    cout结合输出运算符<<完成输出的功能。
    可以做连续的多个输出操作,多个输出时每个输出都要使用<<
    可以使用\n(\newline)完成换行功能,也可以使用endl完成换行。(endline)
    demo:
        cout<<"hello\n";
        int  a=10;   cout<<a;
        char *str="hello"; cout<<str;
        cout<<str<<"\n";
    
    d.cin   标准输入
    cin结合输入运算符>>完成输入的功能。(要有足够的空间)
    可以做连续的多个输入操作,多个输出时每个输出都要使用>>
    cin不会对数据是否越界做检查
    cin遇到空格、换行、回车后会停止工作。
    cin.getline(str,sizeof(str));该函数可以获取一行数据,遇到\n停止工作,可以对数据长度做限制,但是不会读取\n
    
    demo:
        int num;
        cin>>num;
        char str[100];
        cin>>str;
        hello world
   
3.结构,联合和枚举名可以直接作为类型名
    c,C++够着数据类型

C:
    struct ,union , enum
struct stu
{
    char *name;
    int age;
};
struct stu a;
a是变量名,struct stu是类型名
typedef struct stu
{
    char *name;
    int age;
}STU;

STU <==>struct stu

C++:
    stu a;//结构体名作为类型名
    对象:编译器为之分配存储空间的变量,a
    类:    具有共性的实体的抽象,自定义数据类型,stu;

4.const 修饰符
    C++:  
        a.const修饰的常量,必须要初始化
        b.const修饰的常量,其值恒定,任何手段都无法修改,存在文字常量区
        c.当对const修饰的常量进行取地址操作符,编译器会在栈区开辟一块新的空间,其值为常量的值。
        d.const型的数据不可用普通指针去指向,如果要指向,必须加强制类型转换。
    const和指针结合使用:
        const 和指针结合时,可以按照优先级分析,分析时,将数据类型去掉,const修饰的是之后所有的数据。
        (1).const char *str1;
            把类型去掉(const *str1)说明*str1是一个常量,不可变。 str1 是变量,可变。
               通常把这种类型的指针叫做:指向常量的指针变量
        (2).char *const str2;
            把类型去掉(*const str2)说明str2是一个常量,不可变。 *str2 是指针变量,可变。
            通常把这种类型的指针叫做:常(量)指针
        (3). char const *str3;同(1)是一样的,写法不一样而已。
        (4).const char *const str4;
             把类型去掉(const *const str4;)说明str4是一个常量,不可变。 *str4 是常指针变量,不可变。
             通常把这种类型的指针叫做:指向常量的长指针。





5.内联函数
    a.函数调用的过程
        void fun(int a)
        {}
        fun(10);
    
    b.内联函数inline 关键字,可以声明内联函数,内联函数在调用时会进行替换, 没有函数调用过程中的资源消耗,可以代替函数的使用。
        注意:
            1.内联函数声明不一定有效,只能将函数体较小,且没有递归,循环,以及复杂的选择分支才可能有效。
            2.如果一个函数,函数体较小且没有递归,循环,以及复杂的选择分支,调用频繁,即使没有声明为内联函数,编译器会自动加上内联函数。

6.带有缺省的参数的函数
    int special(int x=5,float y=5.3);
 当进行函数调用时,可以有以下几种形式:
 1)special(100,79.8); // x=100,y=79.8
 2) special(25);     // x=25,y=5.3
              3) special();     // x=5,y=5.3
注意:
             只能在声明时设置默认参数
缺省参数都必须是从右到左定义,如:
 int fun(int i,int j=5,int k);//错误,k未使用
 int fun(int i,int j=5,int k=6);//正确,k有使用
            •调用时实参对形参的初始化必须是从左向右的

    
7.函数重载
    a.什么是函数重载?
        将多个函数使用同一函数名命名的情况就是函数重载。
    b.函数重载需要有什么条件?
        1.多个函数功能类似时可以考虑使用函数重载。
        2.函数参数类型、或者个数、或者二者皆不同,可以使用函数重载。
        3.返回值不能作为函数重载的标志
        4.函数重载和带缺省参数的函数结合在一起时,要小心使用。
            void fun(int a);
            void fun(int a,int b=10);

            fun(100); //此函数调用无法区分到底掉的哪个函数。

9.强制类型转换
    c: (待转换的类型)变量名
    c++照常可以使用上述方法。
    int a; float b; a=(int )b
    a=int(b);


10.new和delete运算符
    a.new
    1.new在为简单变量分配内存的同时进行初始化
        new 数据类型(初值)会返回堆中申请的空间首地址。
      如:int *p;  p=new int(90);
    
    2.newy运算符可以为数组申请空间
      new 数组元素的类型[元素的个数]会返回堆中申请的空间首地址。
    int *p = new int[10];
    
    new和malloc的区别:
    new在申请内存时可以进行初始化操作。
    3.delete
        释放空间时,只需delete后加上空间的首地址即可,delete p;
        释放数组时格式为delete []q;


11.引用
    a.什么是变量?
        int a =10;
    在内存申请了4个字节的空间其首地址为0x11223344,在这4个字节的内存中存储的值为10,
    为了方便访问这块内存,我给它起了个名字叫做a(变量名).
    int *p = &a;
    
    b.什么是引用?
    引用,就是别名。
    int a = 5;
    int &b = a;  //a就是b,b就是a
    
    c.引用需要注意的内容
    1.引用必须要初始化
    2.引用可以间接使用
    3.引用的对象初始化完成后不可修改。
    
    d.引用有什么用?
    
    1.可以作为函数参数
    2.可以作为函数返回值
        引用作为函数返回值可以返回全局变量、静态变量、其他生命周期未结束的变量,不可返回局部变量
    实质:简化指针操作,提高效率