zoukankan      html  css  js  c++  java
  • C++入门篇四

    常量引用:形参不能修改,节省开辟内存空间的开销

    用一级指针代替二级指针
    常量引用,使用场景,修饰形参为只读
    const int a=10会分配内存
    如果使用引用,在前面加了一个const的话,那么就不可以修改形参

    void  test01(const int  &b) {
        cout << "b=" << b << endl;
    }
    const int f=43;//这个f是在全局里面,不可以在修改的,不可以使用引用,用指针int *p=(int*)&f;,不可以对*p进行操作,f的值是全局常量,不可以在修改了,*p的值是43
    void s1() { int a = 304; test01(a); int *c = &a; const int &b = 5;//加了const的话,不可以在修改了,引用,int &d=b;真正的一个常量 int *p = (int*)&b;//使用指针取地址 *p = 434; cout << "p=" << b << endl;

        const int v = 43;//真正的一个常量,可以初始化数组,在C中不可以这样,C++可以
        int arr[v];//初始化数组,


       }
    int main() { s1(); system("pause");//阻塞,可以暂停 return EXIT_SUCCESS;//退出返回,返回正常退出 //cout << "hello" << endl;
      
    }

    const给常量分配内部空间,在进行重新赋值

    //int  &ref=43;//这样可以的,不可以分配内存空间
    const  int  &ref=43;const可以额外分配内存空间,相当于是int  temp=43;const int  &ref=temp;
    //ref=54;//这样是不可以的
    //用指针来取到地址
    int  *p=(int*)&ref;//前面不能加const,否则是常量
    *p=33;//此时已经改变了
    cout<<"ref="<<ref<<endl;//此时打印的结果为33,已经改变了

    如果是常量的话,要修改值的话,可以用指针的形式,取到地址然后在进行下一步的操作,如果前面加了const是常量,是不可以修改的,要修改的可以使用指针,const可以分配内存空间

    类的设计:

    设计类,抽象类
    class 类名{
    public 公共权限
    设置成员属性
    设置成员函数
    }

    使用类 创建对象,实例化对象
    类名 对象名
    类和对象的关系:
    类是对象的抽象
    对象是对类的实例

    求圆的周长:

    #include "pch.h"
    #include<iostream>
    using  namespace  std;
    //尽量不使用define
    //#define  Max=100;
    const  double  pi=32;
    //设计一个类
    //class代表的是关键字,后面紧跟和这个是类名
    //周长 
    class Circle
    {
        public://如果没有加这句的话,那这类里面的方法就取不到
        //public//公共权限
        double  getres() {//在这里用来double,所以不需要加括号来获取值
            return  m_r  *pi* 2;//注意这个函数是double的类型,所哟注意这个返回值也要double的类型
        }
        //成员函数可以修改成员属性,传参数进来进行过赋值操作
        void  getr(int   r) {
            m_r = r;//对半径进行赋值
        }
        int m_r;
    };
    int main() {
        int  r = 4;
        Circle  c1;//对象都可以抽象出来一个类,c1是抽象出来的类
        c1.getr(3);//传半径进去,进行赋值操作,传参数进去进行赋值操作
        //double res = c1.getres;
        cout << "res=" << c1.getres() << endl;
    }

    设计学生类:

    #include <string>
    class  Stu{
    public://注意,在这里要加public,公共权限才可以的
        int xuhao;
        string   name;
        //成员函数可以修改成员属性
        void  getid(int num){
            xuhao = num;
        };
    
        void   getname(string  n) {
            name = n;
        };
    };
    void s2() {
        Stu  s;
        s.getid(3);
        s.getname("alex");
        cout << "学号:" << s.xuhao << "姓名:" << s.name << endl;
    }
    int main() {
        s2();
    }

    内联函数:inline,解决了宏缺陷的问题(#define),宏缺陷,作用域,类型,一些运算

    //宏,作用域,类型
    //定义一个加法
    #define MyAdd(x,y) x+y //要这样使用(x)+(y)》》有缺陷
    
    //宏缺陷,作用域,类型,++
    
    //内联函数注意事项
    //内联函数声明
    inline void func();
    void func() {//要加inline关键字
    
    //类内部的成员函数会默认加iline关键字
    
    }

    以下几种情况不能有过多考虑
    1.不能存在任何形式的循环语句
    2.不能存在过多的条件判断语句
    3.函数体积不能过于庞大
    4.不能对函数进行取地址操作

    内联函数总结:

    //内联函数解决了宏缺陷的问题
    //给编译器一个建议,加上关键字
    //成员函数默认会加上关键字,inline
    //编译器有时候会默认加inline

  • 相关阅读:
    WebApi 生成接口文档
    MVC POST 嵌套格式的数据到Controller
    使用ABP框架的项目找不到system.web.http的解决办法
    SQLServer使用XML拆分以逗号分隔的字符串
    webapi使用swagger出现“Cannot read property 'parameters' of null”
    部署到IIS后出现ORA-12560的解决办法
    【ORACLE】“System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本。”解决办法
    Go安装和简单配置开发环境
    怎么安装Jupyter Notebook主题皮肤并设置教程
    如何修改Anaconda中Jupyter Notebook默认工作路径(保存文件路径)
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10680934.html
Copyright © 2011-2022 走看看