鱼C论坛

 找回密码
 立即注册
查看: 3102|回复: 3

[见证历程] c到c++过度 第二天笔记

[复制链接]
发表于 2018-4-24 18:04:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 代号3 于 2018-4-30 15:14 编辑



类的基本使用
        定义方式
        成员意义
        对象意义

类的内部组成
        构造函数
                特殊构造函数
        析构函数
       

        编程方式区别
       
                面向过程:
                                确定项目功能→功能分解→函数实现→功能组装(函数组装调用)
                               
                                自下而上的编程方式
                               
                                程序=算法+数据结构
                               
                面向对象:
                                确定程序流程→功能设为对象→假设对象提供自身的操作方法→在流程框架中调用对象的方法
                                完成项目
                               
                                程序=对象+对象+对象+对象间的交互
                               
                                对象=算法+数据  封装好后 外部的变化不会影响对象内部
                               
                                三大特性:封装 继承 多态
                                 封装是基础 继承是关键 多态是补充
类的概念

        类是结构体的改进  同类对象抽象出的共性
       
        类是将 不同类型的数据 和 与这些数据相关的操作 封装 在一起的 集合体
                                                                类中可以定义函数 参数编译器自动补
                                                               
补充                对象:把一系列数据和处理数据的过程方法封当成一个整体,此封装体叫做对象
                       
                        访问一般对象的成员:
                                <对象名>.<数据成员名>
                                <对象名>.<成员函数名>(<参数表>)
                        访问指向对象的指针的成员:
                                <对象名>-><数据成员>
                                <对象名>-><成员函数名>(<参数表>)
                               
                        对象生存期与作用域:
                                局部对象:定义在一个函数体内或程序块内,作用域和生存周期局部
                                全局对象:定义在某个文件中,作用域为包含该文件的整个程序,生存周期全局
                                静态对象:生存周期全局
                                        内部静态对象:作用域为定义它的函数体和程序块内
                                        外部静态对象:定义它的文件
                                       
        类是对现实世界中的客观事物的抽象,将具有相同属性的一类事物称作类
       
        类是创建对象的样板,包含所创建对象的状态描述(数据)和方法的定义(成员函数)。对象是特定的类
        创建的,某个类所创建的对象也就是这个类的实例。
       
       
类的定义

        声明部分
                数据成员声明
                成员函数声明
        实现部分
                成员函数实现
       
        访问控制符(出现顺序和次数无限制)                        实现封装性  访问:能够使用数据或能调用函数
                public                 提供类的接口功能 不仅可以被成员函数访问还可以在程序中访问
               
                private                成员是被类隐藏的数据,只有该类成员才可以访问,类外部无法访问派生类的函数也无法
                                        访问
               
                protected        成员外部无法访问 派生类函数可以访问
               
        定义一个一个类之后才能在程序中定义类的对象       
               
                class 类名                                可以有空类(隐式6成员 总大小1字节)               
                {                                                                        具体P34课本
                        public:
                                公有数据及成员函数;
                        private:
                                私有数据及成员函数;(使用return来实现调用 get set 成员函数)
                        protected:
                                受保护的成员函数及数据;
                }
        命名约定
        'm_' 后跟变量名  默认是私有类型数据
       
        类中定义的函数被称为成员函数
                特性:
                        成员函数可以访问类中的所有成员(变量和函数)
                声明和实现
                       
                        直接在类内实现成员函数
                       
                        在类内声明 在类外定义
                                void 类名::函数名() 函数名前加作用域
                       
                        类内声明 类外定义(其他文件的类外)
                                头文件包含
                                        void 类名::函数名()
                        常用方式
       
        类中的成员以及成员的使用
        成员变量
                1·类的外部,通过访问类对象访问
                2·成员函数中,直接使用成员变量的名字
        成员函数
                1·类的外部,通过访问类对象访问
                成员函数和命名空间中定义的函数不一样 不是通过作用域就可以访问
                2·类的内部 直接使用函数名
               
                const加在在成员函数后面 表示成员的内部不能修改成员变量的值 不能调用没有加const的成员函数

        访问控制
                public 公有属性         可以在类的外部通过对象来访问
                private 私有属性        只能在类的成员函数中访问 类的外部无法访问
                protected        保护         只能在类的成员函数中访问 类的外部无法访问
               
this指针
        可以访问类中的所有成员
        具有一个隐含的形参 本类类型 *this
       
        void printf(/*类名*this*/)
                this->成员名=参量;
       
        this是一个指针 指向调用成员函数对象的地址                         ?野指针是否出现?成员函数生存周期
                                                                                                                //this与对象密切 析构函数会释放 不会有野指针
        类的作用域简称类域 类域范围指的是在类所定义的类体中,该类的成员局部于该类所属的类域
        类作用:对一个类的数据成员和成员函数受到程序保护       
       
        可见性
                类名允许与其他变量名或函数名同名
                        类名被隐藏 加前缀class
                        类名隐藏了变量通过作用域符号‘::’访问
                       
        类的封装
                默认私有
                定义一个类就是定义了一组数据和操作数据的函数
                类中一些成员是保护的,被有效的屏蔽防止外界干扰和误操作
       
        c++中类与结构体的区别
               
                默认访问区别不同
               
                类增加了定义函数的特性
               
               
               
构造函数        创建对象  目的 初始化!

        特性 初始化列表 按照成员变量声明来初始化不是按照初始化列表顺序                                ?默认参量//可
        定义变量时需要初始化

        通过类类型创建的变量叫做对象,对象的初始化由类的构造函数完成 对象的内存由构造函数分配
        类没有构造函数不能定义对象(无内存 无初始化)
       
        构造函数无返回值 默认是类对象
        函数名和类名一样
       
        对象被创建 自动被调用
        函数名同类名        函数原型没有返回值类型
        函数返回值可以有参数 可以构成函数重载 可以有默认值
       
        new可以为构造函数分配内存并调用构造函数
        malloc可以分配堆内存但无法访问对象不能调用构造函数

析构函数        销毁对象

        对象生存周期结束 用于释放内存 自动调用
        在构造函数名前加‘~’
        无参数 不能重载 只有一种固定写法
               
        析构函数析构对象时注意
                占用了资源(打开了文件)在析构函数中统一释放(关闭文件)
               
构造析构的执行顺序
        先构造
        后析构
       
特殊构造函数

                默认构造
                        特征        无参数
                       
                        调用时机
                                构造对象不传参的时候 只负责构造空间 不初始化
                                函数传参 函数返回值也可能会调用                                                ?时机 2次构造// 调默传转
               
                转换构造
                        特征        参数只有一个 参数类型非本类类型(如果没有相对应成员声明会报错:无此类型)
                                                                                                                隐式转换问题
                                        规则:若目标转换两边类型为基本类型 多数成功
                                                若目标类型为类类型 编译器尝试找到类中转换构造函数 构造一个对象再将此对象赋值目标
                        调用时机
                                间接被编译器调用 发生了隐式转换即实参类型与形参类型不一致的时候
                               
                                显式调用转换构造
                               
                        可能影响程序运行效率(隐式转换)
                                explicit(关键字) :禁用编译器的隐式转换                                        ?作用域 生存期
                                强制类型转换                                                                                                        //整个程序禁用
                                        (类型)量
                                        类型(量)
                                               
                        匿名对象
                                返回对象 临时存在 2次销毁 第一次销毁形参 第二次销毁匿名对象返回值
                                不可修改  接受需要加const在接受的形参前
                               
                        技巧 类名& 参量名
                                对象名.参量名 查看使用的对象
                               
                拷贝构造        将一个对象的内容拷贝给另一个对象 对象间操作 不涉及实参值
                        特征        参数只有一个 参数类型必须是本类类型的引用
                        调用时机
                                定义类对象时 使用另一个类对象来初始化
                                前边加const 保护类型不变
                                类名()=default;保留默认构造函数 以备调用
                               
                                深拷贝                空间浪费问题(解决:浅拷贝基础上引入共用对象概念 使用引用计数(拷入+1析构-1)
                                                                                                计数为0销毁申请的额外空间   写时拷贝技术控制空间申请)
                                        自行构建的拷贝函数 申请等大的堆空间
                                        拷贝指针所指内容
                                浅拷贝
                                        默认拷贝构造函数 简单地址对应拷贝 会造成某个销毁后另一个仍然调用的内存出错
                                        只拷贝指针地址
                带参构造
                        特征        参数个数两个及以上 参数类型无要求
                        调用时机
                                非上述三个函数 eg:多个字符串拼接问题
                               
类的使用
        头文件 string无.h
        eg:string  strObj;字符串类对象
        strObj=“123”;
        strObj+=“78”;
        strObj=string("")+"hello"+"world”;
        if(strObj=="hello”)
        {}
        字符串追加
MyString &append(const char *pStr)
        {
                public:
                        MyString(){
                                m_buff[0]=0;
                        }
                        MyString str;
                        
                        str.append("23").append("789");                
        }
                
        成员指向的空间需要手动销毁问题

       
       
       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-24 18:06:37 | 显示全部楼层
排序和编辑模式不同 传一份原件

424笔记.txt

9.06 KB, 下载次数: 9

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-21 23:15:55 | 显示全部楼层
C++ 怎么下载 求帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-15 21:37:20 | 显示全部楼层

你所指的是编译器么 我用的是VS2015 你需要我可以云盘给你一份儿vs2013的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 09:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表