C++篇三(接上篇)

引用作为重载条件:

int fun(int n)

}
int fun(int &n)
{
}
以上两个函数是可以重载的,但是调用时可能会有冲突.!
冲突: fun(a);
不冲突: fun(23);  ---> fun(int n)

注意:const修饰不能作为重载条件

 重载与默认参数:

int fun(int n1, int n2=2)
{}
int fun(int n1)
{}
可以重载的! 但是也要注意调用冲突. ----> fun(23);

 一、类与对象

封装的思想:

将属性以及行为放置在一起来描述一个事物.就是封装的思想
属性或行为前还可以加以权限的修饰.(public,private,protected)

封装:

1.构造函数与析构函数

        类似于手机需要有出厂设置,出厂设置会将最基本的东西进行初始化,保证后续的使用.-->构造
当你需要处理手机时,需要将你以前所有使用过的记录清理调用. ---> 析构

1、构造函数作用:
对成员属性进行初始化的函数,未初始化的属性值是未知,使用有危险性.
2、析构函数:
在对象空间即将被销毁之前,将对象中的成员属性进行释放(清理).

构造函数:

      1. 编译器会自动进行调用,不需要手动调用. (编译器要求必须调用构造)
      2.如果代码中没有构造函数,则编译器会自动提供(空实现!!!)
      3.  构造函数定义方式:

1、函数名与类名一致
2、函数没有返回值,也不是void类型
3、可以有参数,意味着可以重载

调用时机:在实例化一个新对象时,构造函数会自动调用.
构造函数分类:

无参构造: 函数没有参数..
{
 类名()
 {
 }
 在实例化对象时,如果对象没有参数,则调用该构造.  例如: Hero h1;
}
带参构造: 函数设置一个或多个参数
{
 类名(<参数类型> <参数名>.....)
 {
 }
 如果有带参构造,则表示在实例化对象时,对象可以有参数.  例如: Hero h1("jy")
}

代码举例:

#include <iostream>
using namespace std;

class Hero
{
public:
    Hero()
    {
        //这就是无参构造,用来初始化对象
    }
    Hero(string name,int num)//有参构造
    {
        s_name = name;
        s_num = num;
    }
private:
    string s_name;
    int s_num;
};

构造函数调用方式 :

Hero h1;  --->   调用无参构造 或 编译器提供的默认构造(编译器提供).
括号法:
Hero h1(2);  ---> 调用带参构造. (常用)
显示法:
Hero h2 = Hero(2);
隐式转换法:
Hero h3 = 8;  ---> 调用带参构造.(只能用于一个参数的构造)

析构函数:

1.编译器会自动进行调用,不需要手动调用. (编译器要求必须调用析构)
2.如果代码中没有析构函数,则编译器会自动提供(空实现!!!)
3.析构函数定义方式:

1、函数名与类名一致,但是在函数名前需要添加 ~ 符号. ~类名()
2、函数没有返回值,也不是void类型.
3、不能有参数,意味着不可以重载

4、调用时机:在对象即将被销毁之前,析构函数会自动调用,用于清理成员属性

例如:

class Hero

{

public:

        ~Hero()  //这就是析构函数

        {

                //用delete释放空间

        }

};

拷贝构造:

        调用时机:

        1、利用一个旧对象初始化新对象时: Hero h2(h1);
        2、函数对象以值方式传参时: void fun(Hero h1){}
        3、函数以值方式返回局部对象时

拷贝构造: 该构造函数主要用于复制(拷贝)一个新的对象. (涉及两个对象:被拷贝对象,拷贝对
象)
类名(const <类名>& 对象1)

 //将对象1的所有属性复制给当前对象.
}
例如:
Hero(const Hero &c_h)
{
}

匿名对象(临时对象)

没有名字的对象,匿名对象的空间会在当前语句结束后被释放!!

例如:有一个对象Person,

           Person(2); //匿名对象,此行结束后空间将会被释放 

new 关键字 (跟C语言中malloc有点类似)

new一个对象:

        1.Hero *p_h = new Hero;
        2.Hero *p_h2 = new Hero(56);
        3.Hero *p_h3 = new Hero(*p_h);

构造函数使用规则:
编译器默认提供四个基本函数:
1. 默认构造函数(空实现)
2. 默认析构函数(空实现)
3. 默认提供拷贝构造函数(提供浅拷贝方式)
4. 提供对象赋值运算符重载
规则:
如果用户提供有参构造函数或拷贝构造,则编译器不再提供默认构造函数
如果只是提供了带参构造或无参构造,则编译器还是会提供拷贝构造.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值