c++相关知识(1)

目录

1.类:

 2.封装:

3.构造函数

    3.1 有固定值的构造函数

    3.2有参数的构造函数

4.拷贝构造函数

5.深拷贝和浅拷贝

6.析构函数

7.作用域限定符

    7.1名字空间

    7.2类内声明,内外定义

    7.3explicit关键字


1.类:

        概念:把同一事物的共同特征提取出来就是类,抽象概念
        对象:由类创造的具体实体叫做对象
            类中包括属性和行为 
                属性用来描述类是什么样的 一般都是些名称
                行为是描述类可以做什么  一般都是动词
        栈内存对象:通过点的方式调用成员,出了所在范围就自动销毁
            例如:student s;
        堆内存对象:需要通过关键字new来创建,调用方式为:->,需要手动销毁,
                销毁时使用关键字delete,并且对指针赋值为NULL;如果不销毁
                会造成内存泄漏。
            例如:student *s1 = new student;

 
2.封装:

        概念:将类中的一些属性和具体实现细节隐藏,通常表现为把属性设为私有。
        访问的话需要通过公告接口。封装可以通过控制属性的读写权限,提高程序安全性。
        例如:
            class student{
                private:        //私有
                        属性列表
                public:        //公共
            };


3.构造函数


        概念:用于创建对象时初始化对象中的属性
        特点:
            1)实例化对象时,必须调用构造函数进行初始化。
            2)如果不现实的给出构造函数,会有一个默认的构造函数,参数和函数体都为空
            没有实际意义
            3)如果给出任意构造参数,默认的无参的构造参数就不会存在
            构造函数是一个特殊的函数:
                名字和类同名;
                不需要返回值;


    3.1 有固定值的构造函数


        可以在函数内部直接给定值,这样不需要进行传参
        例如:
        student s(){
            属性赋值
        }


    3.2有参数的构造函数


        用参数给属性赋值,可以通过传参方式变的更加灵活
        例如:
        student s(参数){
            属性赋值
        }


    构造函数可以重载
    构造函数支持默认值


4.拷贝构造函数


    概念:通过已经存在的对象为新对象完成初始化
        拷贝的参数是对象的引用或者const修饰的对象引用,可以将已存在对象的属性赋值给新的对象。
    特点:拷贝构造特殊函数,可以与构造函数构成重载
        如果不显示给出构造函数,编译器会给出一个默认的构造函数,完成两个对象之间的赋值
        对象之间是相互独立的实体,数据也相互独立
        例如:
        student s1(s);


5.深拷贝和浅拷贝


    如果对象的属性中有指针类型的时候,需要显示的写出构造函数
    浅拷贝:
    定义:如果不显示的给出拷贝构造函数,会有默认的拷贝构造函数,完成对象之间简单的值赋值,
        简单值赋值的操作叫做浅拷贝
        如果对象中的属性有指针类型的时候,默认拷贝构造也只会简单的进行地址的复制,
        导致两个对象的属性指向同一块内存,破坏了对象之间的独立性。


6.析构函数


    对象声明期结束前应该完成对象资源的清理,这个工作通过析构函数完成。
    比如创建对象时为数据成员开辟的空间,会通过析构函数在对象的生命期结束前进行释放。
    若类中没有显式定义析构函数,则编译器会给出一个默认的析构函数,函数体为空,
    在对象生命期结束时默认的析构函数被执行。
    
    默认析构函数的形式:~类名(){}
    特点:
        1)析构函数没有参数,所以不能重载
        2)    对象销毁时自动调用
        new关键字创建的堆内存对象需要手动delete销毁,才会自动调用析构函数
        创建对象时如果为数据成员开辟了空间,需要通过析构函数在对象的生命期结束前进行释放


7.作用域限定符::


    7.1名字空间


        命名空间实际上是由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间区域,
        把一些自己定义的变量、函数等标识符存放在这个空间中,从而与其他实体定义分隔开来。
        
        std是C++标准库的一个名字空间,很多使用的内容都是来自于标准名字空间
        例如字符串std::string、std::cout...
        当项目中包含using namespace std;时,代码中使用std名字空间中的内容就可以省略前面的std::
        
        可以让不同的名字空间村咋相同的变量名和函数名


    7.2类内声明,内外定义


        当函数的声明和定义分离时,需要用到作用域限定符::指名函数属于哪个范围


    7.3explicit关键字


        等号赋值时,等号的左边是对象类型,等号右侧恰好是构造函数可以接受的类型,
        这时编译器就会自动把等号右边的数据传入到构造函数中。相当于隐式调用了构造函数。
        
        在对象操作过程中,可能不小心隐式调用了构造函数,造成错误。为了屏蔽隐式构造,可以加explicit关键字 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值