我是靠谱客的博主 冷傲仙人掌,最近开发中收集的这篇文章主要介绍C++每日学习笔记DAY3,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.案例分析-判断点和圆关系
    1.1 点类
        1.1.1 属性:X坐标、Y坐标
        1.1.2 行为:设置圆心、半径和获取圆心、半径
    1.2 圆类
        1.2.1 属性:半径、圆心、(point点类)
        1.2.2 行为: 设置圆心、半径和获取圆心、半径
    1.3 用成员函数方式和全局函数方式测试点和圆关系
    1.4 亦可以分文件编写:声明(放在.h文件中)和实现(放在.cpp中)分开,不要忘记包含头文件和加作用域。
2.构造函数和析构函数
    2.1 构造函数语法
        2.1.1 无返回值、无void等类型、函数名与类型相同
        2.1.2 有参数、可出现重载
        2.1.3 由编译器自动调用且仅调用一次
    2.2 析构函数语法
         2.2.1 无返回值、无void等类型、函数名与类型相同,名称前加~
        2.2.2 无参数、不可出现重载
        2.2.3 由编译器自动调用且仅调用一次
3.构造函数的分类以及调用
    3.1 分类
        3.1.1 按照参数分类:有参构造、无参构造(默认构造)
        3.1.2 按照类型分类:普通构造、拷贝构造(形如:类名(const 类名 &a))
    3.2 调用方式
        3.2.1 默认构造调用例如:Person p;不可写成 Person p(),编译器会认为它是一个函数的声明
        3.2.2 括号法:Person p1(10)、Person p2(p1);前者为有参后者为拷贝构造
        3.2.3 显示法:Person p1=Person(10)、Person p2=Person(p1)
            3.2.3.1 Person(10) 匿名函数对象; 特点:当前行执行完成后系统就会回收
            3.2.3.2    Person(p1) 不可以用拷贝构造函数初始化匿名函数对象,原因是因为编译器认为是对象声明
        3.2.4 隐式法
            3.2.4.1 Person p1=10;相当于编译器隐式将代码转变成Person p1= Person(10)
4.拷贝构造函数的调用时机
    4.1 使用一个已创建好的对象来初始化另一个对象
    4.2 以值传递的方式 给函数的参数传值
        4.2.1 例如:void ew(Person p) 
    4.3 以值的方式返回局部对象
        4.3.1 例如:Person ew1()
5.构造函数的调用规则
     5.1 系统会默认给一个类添加至少3个函数:默认构造函数、析构函数、拷贝构造函数(简单的值拷贝)
    5.2 如果提供了有参构造函数,系统就不会提供默认的构造函数但依然会提供拷贝构造函数
    5.3 如果我们自己提供拷贝构造函数,系统就不会提供其他普通的构造函数

6.深拷贝和浅拷贝
    6.1 系统提供拷贝构造函数只会做简单的值拷贝,测试时遇到Person p1("QAa", 18);语句出现无法从类型1传到CONST的问题,因而要必须在形参字符串前加(char*)
        改成Person p1((char *)"a", 18);才能运行
    6.2 如果类中有属性开辟到堆区,及在释放的时候因为浅拷贝的问题导致堆区内容会重复释放,程序中断停止
    6.3 根据上述问题可以利用深拷贝解决

7.初始化列表
    7.1 格式:构造函数名称():属性1(值),属性2(值)......
    7.2 功能:用于初始化类的属性
8.类对象作为类成员
    8.1 当其他类对象作为本类成员,优先构造其他类对象,其次构造自身,析构时相反    
9.explicit 关键字
     9.1 explicit关键字用途:防止隐式类型转换方式来初始化对象
        9.2 放在 构造函数名称前
10.new和delete 操作符
    10.1 new和malloc区别
        10.1.1 new是一个运算符,malloc是一个库函数
        10.1.2 malloc返回值是void* ,new返回的是new出来的对象的指针
        10.1.3 malloc 需要判断是否开辟成功,new内部已经做好不需(malloc数据在堆区,判断内存是否分配成功,调用构造函数)
        10.1.4 malloc不会调用构造函数,new会调用构造函数
        10.1.5 malloc  释放对应的是free,new释放对应的delete
    10.2 注意点
         10.2.1 不可用void * 接收new出来的对象,因为不能释放
    10.3 利用new创建数组
        10.3.1 利用new在堆区创建数组时,类中必须有默认构造函数,否则无法创建成功
        10.3.2 如果数组是在栈上开辟的,那么可与指定利用哪个构造函数来初始化对象
        10.3.3 如果是数组,释放时要在delete后加拍[]

最后

以上就是冷傲仙人掌为你收集整理的C++每日学习笔记DAY3的全部内容,希望文章能够帮你解决C++每日学习笔记DAY3所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部