Linux/C++系统编程 day5

类与对象

对象的创建与销毁

构造函数

  • 函数名与类名相同,无返回类型返回值

  • 对象在创建的时候会调用构造函数,用以完成数据成员的初始化

  • 构造函数不能通过对象以.的方式调用

  • 默认情况下编译器生成无参构造函数,如果已经自定义构造函数则不会生成无参构造函数,显然构造函数可以进行重载

  • String str;

    (创建String类对象)

  • String str();

    (声明一个空参返回string的函数)

初始化表达式

  • 每个数据成员初始化顺序由被声明时的顺序决定,与其在初始化列表中顺序无关

    (先执行默认初始化后,再在函数体中执行赋值操作。错误的顺序会初始化出错)

  • :_brand( new char[strlen(brand) +1]( ) ) ,_price(price)

  • strcpy(_brand, brand);

    (不能使用sizeof,开出的空间大小可能不够)

析构函数

  • 完成数据成员的清理工作

  • 一个类只有唯一一个析构函数,不可重载

  • 析构函数可以通过.成员函数调用,但是不建议显式调用,可能发生意料之外的事情

  • 默认情况下,编译器自动生成析构函数

  • delte[ ] _brand; _brand = nullptr;

    (对于堆空间需要手动回收)

析构函数调用时机
  1. 对于全局定义的对象,每当程序开始运行,在主函数main 接受程序控制权之前,就调用构造函数创建全局对象,整个程序结束时,自动调用全局对象的析构函数。
  2. 对于局部定义的对象,每当程序流程到达该对象的定义处就调用构造函数,在程序离开局部对象的作用域时调用对象的析构函数。
  3. 对于关键字static 定义的静态局部变量,当程序流程第一次到达该对象定义处调用构造函数,在整个程序结束时调用析构函数。
  4. 对于用new 运算符创建的对象,每当创建该对象时调用构造函数,当用delete 删除该对象时,调用析构函数。

(~是按位取反,全反!是逻辑取反表示0与0非0)

代码示例

class Point{
public:
	 Point(int ix,int iy)
    : _ix(0)//初始化表达式(初始化列表)
    , _iy(0)//初始化
    {//构造函数
		cout<<"Point(int,int)"<<endl;
      _ix=ix;//赋值
		_iy=iy;//赋值
	 }
    Point(){//默认无参构造函数
		
    }
    void print(){
		cout<<"("<<_ix<<","<<_iy<<")"<<endl;
    }
    ~Point(){//析构函数
		cout<<"~Point()"<<endl;
    }
private:
    int _ix;
    int _iy;
}

Point::Point(){
}
Point::~Point(){
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值