OOP02 类和对象 构造函数和析构函数

1.类的构成

class  类名 {
public:
  公有数据成员;
  公有成员函数;
protected:
  保护数据成员;
  保护成员函数;
private:
  私有数据成员;
  私有成员函数;
 };

private只能本类的成员函数访问

protected可以由本类或者派生类访问

public是任意函数能访问

private出现在程序的开始时,关键词可以省略。

不能在类中给数据成员赋值,需要在构造函数中赋值。

2.成员函数的声明

在类中给出函数声明:

返回类型  成员函数(参数列表);

在类外给出函数定义:

返回类型  类名∷成员函数名(参数表)
  {
       // 函数体
  }

内联函数:函数体放在类中。

外联函数:函数头放在类中,定义在类外。

内联函数性能优于外联函数,在外联函数前面加上inline可以将外联函数转化为内联函数。

一般较短的定义为内联函数比较合适,较长的定义为一般函数。

3.对象的定义和使用

声明对象

可以在声明类的同时定义,也可以在声明后定义。

class  Coord { 
    public:
        void setCoord(int,int);
        int getx();
        int gety();
    private:
        int  x,y;
    }   op1,op2; 
class  Coord { 
     //…
  }; 
     // …
 main()
 {
   Coord  op1,op2;
     // …
  }

访问对象的方法

对象名.数据成员名

对象名.成员函数名

其实是一种缩写:

对象名.类名::成员名

如果定义指向对象的指针,使用->访问成员

对象赋值

相同类型变量可以互相赋值,赋值方法为逐位拷贝。

如果类中存在指针,可能会出现错误。

4.构造函数与析构函数

构造函数作用

初始化成员变量,

没有返回类型,

可以没有参数

必须和类同名,不需要用户调用。

class 类名
{ public:
	类名(形参表);		//构造函数的原型
	//类的其它成员
};
类名::类名(形参表)	//构造函数的实现
{
	//函数体
} 

构造函数初始化参数的方式

在函数体内赋值

或者使用初始化列表的方式

类名::构造函数名(参数表):(成员初始化表)
{
    // 构造函数体
}

初始成员列表的形式为:

数据成员名1(初始值1),数据成员名2(初始值2),…… 

拷贝构造函数

使用一个已经存在的对象初始化新对象

如果使用等号赋值,系统自动调用拷贝构造函数。

拷贝构造函数也是构造函数,只有一个参数,是同类对象的引用。

可以对拷贝构造函数进行自定义:

class 类名
{  public :
       类名(形参);//构造函数
       类名(类名 &对象名);//拷贝构造函数
           ...
};
类名:: 类名(类名 &对象名)//拷贝构造函数的实现
{    函数体    }

拷贝构造函数的使用:

Coord p2(p1);    // 用对象p1初始化对象p2, 
Coord p3=p1;    // 用对象p1初始化对象p3, 

缺省拷贝构造函数:如果没有定义拷贝构造函数,C++自动使用逐个成员拷贝的方式。

浅拷贝:默认拷贝函数的方式,逐一拷贝数据成员。如果数据成员出现指针会产生错误。

深拷贝:自定义拷贝,将指针所指的内存进行拷贝

类组合构造函数

类组合指的是类的成员是一个类的对象。

类组合构造函数必须对本类中的基本类型成员数据赋值,也要对对象成员初始化。

类名::类名(对象成员所需的形参,本类成员形参)
       :对象1(参数),对象2(参数)......
{  本类初始化  }

先调用内嵌对象的构造函数,然后调用本类的构造函数。

析构函数

与类名称相同,多一个~,不能被重载,无函数值,没有参数,没有返回值

生命周期结束时,系统自动调用。

调用顺序

构造函数1->构造函数2->构造函数3->结构函数3->解构函数2->解构函数1

向前引用声明

如果需要在类声明之前引用该类,需要向前引用声明。

要求在完整声明其之前不能声明该类的对象。可以声明该类的指针。但是不能使用该类的方法或者成员变量。

class B;  //前向引用声明
class A
{  public:
      void f(B b);
};
class B
{  public:
      void g(A a);
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值