c++学习第四篇

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型的数据不可用普通指针进行随意指向,如果要指向,请加强制类型转换。

5.const和指针结合情况

    const和指针结合时,可以按照优先级分析,分析时将数据类型去掉,const修饰的是之后所有的数据

    a.指向常量的指针变量:

    const char *str1;

    char const *str3;

    const *str1;  *str1是常量,不可变,str1是变量,可变

    b.常(量)指针

    char * const str2;

    *const str2;  str2是常量,不可变,*str2是变量,可变

    c.指向常量的常指针

    const char * const str4;

    const  * const str4; str4, *str4皆为常量,均不可变。

6.内联函数

    a.函数调用的过程

        void fun(int a)

        {}

        main()

            int a;

            fun(10);

            int b;

    b.内联函数

        使用inline关键字可以声明内联函数,内联函数在调用时会进行替换,没有函数调用过程中的资源消耗。可以代替宏函数的使用。

        注意:1.内联函数声明后不一定有效,只能将函数体较小,

            且没有递归、循环以及复杂选择分支结构才可能会有效。

            2.如果一个函数,函数体较小且没有递归、循环以及复杂选择分支结构,调用较频繁

            即使没有声明为内联函数,C++的编译器也可以将其当做内联函数操作。

7.带有缺省参数的函数

    a.定义:

    在声明函数原型时,可为一个或多个参数指定缺省参数值,以后调用此函数,若省略其中某一参数,C++自动地以缺省值作为相应参数的值。例如函数原型说明为:

     demo:

        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();

    注意:

        1.缺省参数的设置必须从右到左进行。

        2.必须函数调用过程中保证每个参数都进行赋值才可以。

        3.带有缺省参数的函数仅在声明时有效

8.函数重载

    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.可以作为函数返回值

        引用作为函数返回值可以返回全局变量、静态变量、其他生命周期未结束的变量,不可返回局部变量

    实质:简化指针操作,提高效率

#include <iostream>

#include <stdio.h>

using namespace std;

char *fun(char str[20])

{

//    char *str = "hello world";

    //char str[20] = "hello world";

    printf("sizeo=%d\n",sizeof(str));

    return str;

}

//引用作为函数返回值

int& fun(int &a)

{

    return a;

}

int main(int argc, char *argv[])

{

    int a = 10;

    int c = fun(a);

    printf("%d\n",c);

    return 0;

}

发布了36 篇原创文章 · 获赞 7 · 访问量 7827

猜你喜欢

转载自blog.csdn.net/qq_33301482/article/details/84067744
今日推荐