• C++入门篇二


    c++是c语言的增强版,但是和c语言之间有何区别呢?

    c和c++的区别:

    1.全局变量检测增强
    int a;
    int a=10;

    2.函数检测增强,参数类型增强,返回值检测增强,函数调用参数检测增强(参数检测个数)
    c中传入的参数与接收的参数可以不同,只是警告,c中你传多少个参数,只有几个接收参数都可以,但是在C++中不可以,有多少个采纳数就接收多少个参数

    c中可以不加返回值,警告
    但是在c++中都会报错显示出来

    3.类型转换检测增强
    char *p=(char*) malloc(sizeof(64));//malloc返回值是void*,强制转换(char*)

    在c中返回void*,不用强转,在C++中需要强转

    4.struct增强

    void person(){
    int age;
    void pulsage(){
    age++;
    }}

    注意:在c语言中struct是不可以加函数的
    在C++中struct是可以加函数的


    void test(){

    struct person p1;//在使用的时候必须加上struct关键字,但是在c++中不加上struct也可以
    p1.age=100;
    p1.plusage();

    }

     

    例子:struct增强:

    struct Person
    {
        int age = 10;//在这里是可以直接是申明age的,c是不可以这样的
        void  plusage() {//在这里是直接可以写一个函数在里面,c是不可以的
            age++;//在这里是可以添加一个函数void进来
        }
    };
    
    int  main() {
        Person  p1;//person结构体用p1来表示
        cout <<  "C++增强版本:"  << p1.age << endl;
        p1.plusage();//调用结构体里面的函数之后age的值加1
        cout << "C++增强版本:" << p1.age << endl;
    }

    运行结果:

    5.bool类型增强,在c语言是没有bool类型,在C++语言中是由bool类型的,非0就是真,sizeof

    void  test06(){
        bool  flag;//默认是1,flag,只有真或者假
        cout << "bool类型" << sizeof(flag) << endl;//sizeof,数据类型所占的大小
        flag = 100;//非0就是1
        cout << flag << endl;
    
    }

    运行结果:

    6.三目运算符(c中返回的是值,在c++中返回的是变量)

    int a = 10;
    int b = 20;
    printf("ret=%d
    ", a > b ? a : b);//在c语言和c++都可以
    
    //a > b ? a : b//如果a>b的话,那么该值就是a
    //a >b ? a : b = 100;//在这里由于a小于b,所以结果就是b=100,重新被赋值了,在c语言中,这里面是20=100,是不可以这样的,在C++中返回的是变量
    (a < b ? a : b)=100;//在c++中这个是返回的是变量,a=100.为什么加括号,当成立的时候,a<b成立时直接执行到a:b中的a就好了,不会执行后面的部分,所以不会被赋值
    cout << "a="<<a << " b=" << b << endl;//在这里的话就是打印出赋值之后的b的值出来
    
    //如果c语言向模仿这个c++语言来编写的话,那么要加*,c语言
    *(a > b ? &a : &b)= 100;//通过指针的形式来返回变量进行赋值

    c语言中返回的是值,在C++返回的是变量,如果要使用c语言的三目运算符赋值的话,要使用指针*的,才可以对三目运算符进行赋值

    7.const增强,c中不能修改,可以用指针的方式,但在C++中是可以修改的

     

    //const强制转化,在c中只能读,常量,不能修改的
        //在c语言中,会临时开辟一块内存空间,在c++,const不会分配内存,const  int a=100;
        const  int  a = 203;//如果放在全局里面,那么受到保护,不可以修改的,并不是真正的常量
        printf("a==%d
    ", a);
        
        //下面是c的指针方式,利用地址来分配临时的内存空间
        int *p = (int*)&a;//在c语言中用指针的方式来进行强制转换
        *p = 243;
        printf("a的值=%d
    ", *p);
        printf("原来的值%d
    ", a);
        //int  arr(a);//不可以初始化数组

     

    运行结果:

     

    const增强,使用extern增强作用域,找到这个值a,新建一个const.cpp文件,代码如下:

    c默认是外部链接,c++默认是内部链接

    #include  "pch.h"
    extern const  int  a = 102;
    //加上extern,可以增加作用域,C++的const默认是内部链接

    main方法代码如下:

    int  main() {
    
        extern  const int  a;//取外面找a,a是全局作用域
        printf("a的值是%d
    ", a);
    }

    const分配内存

    /*
    1.const分配内存,取地址会分配临时内存
    2.extern编译器也会给const分配内存

    3,普通常量重新初始化const变量也会被赋值

    */

        const  int  m_a = 10;
        int  *p = (int*)&m_a;//会分配临时内存
    
        //普通变量初始化const变量也会分配内存
    
        int f = 100;
        const int  b =f;//这个时候也会分配内部空间
    
        printf("b的值%d
    ", b);
        int  *q = (int*)&b;
        *q = 230;
        cout << "指针分配内存之后:" << *q << endl;

    实例:

    #include  <string>//引入string的时候,要加上这句
    //定义一个结构体呀
    struct Person1{
        int agg ;
        string  p_name;
    };
    //string来分配内存空间
        //用指针来取值呀
        const Person1  p1;//将person结构体赋值给p1
        Person1  *s = (Person1*)&p1;//把这个变量的地址拿过来,强制转化成结构体
        (*s).agg = 23;//*s是一个结构体变量,可以读这个结构体属性进行赋值
        s->p_name = "yunxin";//s指向的是指针,指针指向name进行赋值操作
        cout << "之后的age结果是:" << (*s).agg << "名字是:" << s->p_name << endl;

    运行结果:

    #define max=100;//宏常量不重视作用域,undef max 卸载
    const int m = 100;//尽量用const替换上面的宏

     

  • 相关阅读:
    【原创】只需3行代码,Python基础面试题:循环报数3的出圈
    【原创】MySQL同时取出最大值和最小值所在整行
    【原创】Python打印立方米
    【Python】如何像cmd一样操作系统命令
    【群答疑20210525-3】MySQL限制时间是当前月,或者月区间查询
    【群答疑20210525-1】MySQL列名相同,出现两列问题
    【原创】爬虫反爬基础常见类型总结
    【原创】Python基础面试题:按照年龄判断未成年还成年(条件语句)
    【原创】Python基础:你真的知道and和or的用法吗
    【Python】 读写MySQL
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10674623.html
Copyright © 2020-2023  润新知