c++核心编程

一. 内存分区模型

  1. 四个分区

    • 代码区:存放函数体二进制代码,由操作系统进行管理

    • 全局区:存放全局变量和静态变量以及常量

    • 栈区:由编译器自动分配和释放,存放函数参数值,局部变量等

    • 堆区:由程序员分配和释放,若程序员不释放,程序结束后由操作系统回收

      注意:常量区存放全局常量,和字符串常量

  2. 程序运行前

    • 代码区:共享,只读
    • 全局区:程序结束后由操作系统释放
  3. 程序运行后

    • 栈区
    • 堆区: new开辟的内存
  4. new操作符

    • 堆区开辟的 数据由程序员手动开辟手动释放,开辟new,释放delete

    • 利用new 创建的数据会返回该数据对应的类型的指针

      int *arr = new int[10]; //new开辟数组
      
      delete [] arr;  //释放
      

二. 引用

  1. 概念:给变量起别名

    语法:数据类型 &别名 = 原名

    注意事项:必须初始化,在初始化后不能改变

  2. 引用作函数参数

    • 作用:让形参修饰实参
    • 优点:简化指针修改实参
      1. 值传递
      2. 地址传递
      3. 引用传递
  3. 引用作函数返回值

    • 注意:不要返回局部变量引用
    • 函数的调用可以作为左值,修改数值
  4. 引用的本质

    本质:指针常量 int * const p = &a; --> int &p=a;

  5. 常量引用

    • 常量引用主要用来修饰形参,防止误操作

    • 在函数形参列表中可以加const修饰形参,防止形参改变实参

      void func(const int &a);
      
      const int &ref = 10; //相当于int temp = 10;const int & ref = temp;
      //加入const变为只读
      

    三. 函数提高

  6. 函数默认参数

    int func(int a,int b=10)
    

    注意:如果函数声明有默认参数,函数就不能有默认参数,声明和实现只能一个有默认参数

  7. 函数占位参数

    int func(int a,int)  //写一个数据类型名就行 占位参数可以有默认参数
    int func(int a,int = 10) 
    
  8. 函数重载

    • 同一作用域下
    • 函数名称相同
    • 参数类型不同,个数不同或者顺序不同
    • 注意事项:
      1. 引用作为重载条件
      2. 重载碰到函数默认参数

四. 类和对象

三大特性:封装,继承,多态

  1. 封装

    • 语法:class 类名{访问权限:属性 /行为};
    • 意义:
      1. 将属性和行为作为一个整体,并加以权限控制
    • 权限:
      1. public 公共 //类内,类外都可访问
      2. protected 保护 //类内可以访问,类外不可访问 子类可以访问
      3. private 私有 //类内可以访问,类外不可访问 子类不可访问
    • struct 和class的区别:就在于默认的访问权限不同,struct默认公共,class默认私有
    • 成员属性设置为私有
      1. 可控制读写权限
      2. 对于写权限可检测数据有效性
    //一般写成这样  .h文件第一行一般写 #pragma once
    class Cube
    {
    private:
    	int height;
    	int weight;
    	int length;
    public:
    	void setter(int h,int w,int l);
    	double Area();
    	double Tiji();
    	bool isSameByClass(Cube &c);
    	
    };
    
    void Cube::setter(int h,int w,int l)
    {
        height = h;
        weight = w;
        length = l;
    }
    double Cube::Area()
    {
    	return 2*height*weight+2*height*length+2*length*weight;
    }
    double Cube::Tiji()
    {
    	return height*weight*length;
    }
    bool Cube::isSameByClass(Cube &c)
    {
        if (Tiji()==c.Tiji())
        {
        	return true;
        }
        return false;
    }
    
    
  2. 对象的初始化和清理

    • 构造函数:对象初始化函数

      1. 语法:类名(){}
      2. 特点:
        • 没有返回值,不写void
        • 名称与类名相同
        • 可以有参数,可以重载
        • 调用对象时自动调用构造,只会调用一次
      3. 构造函数的分类
        • 按参数分: 有参和无参, 默认无参
        • 按类型分:普通构造和拷贝构造
      4. 构造函数的调用:
        • 括号法
        • 显示法
        • 隐式转换法
      5. </
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值