类学习二

类学习二 (红皮书 P68-82)

                               2016.3.19.晚7:30

进一步的认识:

  1. 公有的成员函数相当于是类的对外接口,而私有的则是自己独享的隐私,外界的人不能随便更改,只能通过公有的成员函数进行得知。即实现了接口和实现的分离。

  2. 分离的好处:只要接口没有变,对私有的修改就不会引起错误。

  3. 编程习惯:把类的声明放在头文件中,成员函数的定义即类的实现放在主文件中

重点来啦。。。。构造函数

1、构造函数是类的初始化。类的初始化不能直接在定义中声明。

2、构造函数的名称必须与类名一致,没有返回值类型

3、在没有写出来的时候,默认调用的构造函数初值全是零,且构造函数的本质在于为对象分配存储空间

4、构造函数可以重载,系统的识别在于对象到底声明得是什么样的。

5、不使用参数而调用的构造函数有两种写法,一种有初值。一种无初值:
Box ();//无初值
Box(int=10,int=10,int=10)//有初值

这两者不能同时出现,不可兼得,互不相容

#include <iostream>
using namespace std;
class Box
{
public:
    Box();
    Box(double, double, double);//带参数的构造函数可为空Box();
    double volume();
    ~Box();
private:
    double length;
    double width;
    double height;
};
Box::Box()
{
    length = 12;
    width = 2;
    height = 13;
}

Box::Box(double l, double w , double h)//函数定义时的形参
{
    length = l;
    width = w;
    height = h;
}
//上面的构造函数等价于:(第二种初始化数据成员的方法,使用参数初始化表)
//Box::Box(double l, double w, double h) :height(h), width(w), length(l){}


double Box::volume()
{
    return (length*width*height) ;
}

Box::~Box()
{
    cout << "体积已计算并输出"<<endl;
}


int main()
{
    Box box1;
    cout << box1.volume() << endl;
    Box boxes(12,2.5,13);//构造函数是到参数的,则声明的对象就是带参数的
    cout<<boxes .volume()<<endl;

    //system("pause");
    getchar();
    return 0;
}
//这样析构函数的结果是一闪而过的,因为析构函数只有在函数调用结束后才释放,也就是return 0执行完之后执行,所以看不到。
//要想解决这个问题,我们可以把那一部分写到函数里,函数结束则析构函数调用,而不是放在主函数中

重点来啦。。。。析构函数

1、~+类名组成的函数叫析构函数

2、由来:如果声明了一个对象,生成时会调用构造函数分配存储空间,但是对象用完之后就没用了,如果及时清理的话,会释放内存空间,节省内存。

3、和构造函数一样,也有默认的析构函数。默认的析构函数是在对象释放前自动执行析构函数。

4、先构造的后析构,后构造的先析构

总结构造和析构的时间:

1、在全局范围内定义的对象,既不在任一个函数中的对象,它的构造函数在所有函数之前。

2、在函数中定义的对象,则在建立对象时才调用构造函数

3、静态的局部对象,只在第一次调用时调用析构函数,而且不主动释放,即只有遇到main函数和exit函数的结束才调用其析构函数。
例:
void fun()
{
Student sdt1
static Student sdt2;
}
在这个函数开始时,都调用其构造函数;
在这个函数结束时,std1被析构,而std2并不被析构。

先写到这里吧,今天星期六了,该休息了。。晚安,world~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值