类和对象

1.

//说明部分

class  类名  定义类可用关键字class,struct。class默认访问权限private,struct默认访问权限public

{

  public:类体内可见,类体外可见

  private:仅类体内可见

  protected:对定义它的类而言相当于私有成员,对该类的派生类而言相当于公有成员

};

//实现部分

函数类型 类名::成员函数名 (参数表)

定义对象 Date d1;

2.构造函数 用于初始化对象,函数名同类名,无类型,无返回值,自动调用

  默认构造函数         Date();   若用户没有定义任何构造函数,系统会自动创建一个默认的构造函数

  带参数的构造函数    Date(int x);

  拷贝构造函数      Date (Date &d1){ }     若用户没有定义拷贝构造函数,系统会自动创建一个默认的拷贝构造函数

3.析构函数   用来释放所创建的对象,函数名同类名,无类型,无返回值,自动调用,

      用户没有定义析构函数时,系统会自动创建一个默认的析构函数

      没有参数,不能重载

4.成员函数:可以重载

      可以说明为内联函数,加关键词inline

      参数可以设置默认值

5.静态数据成员:可以实现同类多个对象之间是数据共享,它属于所有对象,如果它的值被改变,则各个对象中该数据成员的值都被改变

        对静态数据成员初始化不用构造函数,而是系统开辟公共的储存单元

        静态数据成员除了可以使用对象名引用外,还可以使用类名来引用

   说明:static int b;

   初始化:int Date::b=1;(必须初始化

   引用:Date::b;

6.静态成员函数

  说明:static int function();

  引用:Date::function() 或  d.function()

  静态成员函数中不能引用非静态成员。

7.常数据成员

  其值不能改变

  说明:const int a;

  初始化:(采用构造函数的成员初始列表来实现) Date(int x):d=1 ,a=2 { }

  既是静态数据成员又是常数据成员的放在类体外初始化

  1)对象的常引用

     定义:const A &ra=a;

8.常成员函数

  说明:int function()const { }  (const放在函数头后面)

  用const可以与不带const的函数重载

  常对象只能调用常成员函数,不能调用非常成员函数

  非常数据成员在常成员函数中可以引用,但不可改变,而常数据成员在常成员函数中和非常成员函数中都不可改变

  常对象的数据成员都是常数据成员,其值不得改变,但是,常对象的没加修饰符const的成员函数,仍然是非常成员函数

9.友元函数

  说明在类体内的一般函数,也可以是另一个类中的成员函数

  友元函数不是这个类中的函数,但是能访问该类所有成员,但访问时不能直接引用,必须使用对象进行引用

  友元函数在调用上同一般函数,不必通过对象进行引用

  破坏封装性,少用

  说明:friend int function(); 若定义在类体外,同一般函数,不用加friend

10.友元类

  class A

  {

    friend class B;

  }

  B是A的友元类,B的所有函数都是A的友元函数,B中的所有函数都可以访问A,但A不能访问B

11.类型转换

  1)算数运算时,低类型自动转换成高类型(浮点X整数,系统自动将整形转换为浮点型)

  2)赋值表达式中,右边的表达式类型自动转换为左边变量的类型

  3)函数调用时系统将实参转换为形参类型后再传值

  4)函数有返回值时,系统自动将返回的表达式的类型转换为该函数的类型后,再将表达式的值返回给调用函数

  5)一般数据类型转换为类类型:若类中有只含一个参数的构造函数,则可用d=20给一个类赋值,系统自动调用单参数的构造函数将20转换成D类对象

  6)类类型转换为一般数据类型:用类型转换函数

    定义:operator double() {具体转化规则}

    一个类中允许定义多个类型转换函数,可将该类的对象转换成不同的数据类型

 12.对象指针

  定义:Date *pd=&d1;

  指向对象的指针主要用来作函数参数和返回值

  当对象指针做函数形参时,函数实参是同类对象的地址值

  对象指针作参数实现传址调用,具有补拷贝副本,只传地址值的高传输效率,又有可在被调用函数中可以改变调用函数中实参值。

13.指向对象的常指针

  定义:Date * const pd;

  该指针指向固定的对象,不能使其指向别的对象,但该指针所指向的对象内容可以改变。

  指向常对象的指针

  定义:const Date *pd;

  该指针不能改变所指对象的值,但可以指向别的对象  

  如果有一个常对象,指向它的指针一定要用指向常对象的指针,指向一般对象的指针是不行的

  指向常对象的指针可以用一般对象的地址值进行赋值,但是不能通过该指针改变对象的值

  使用指向常对象指针引用的成员函数应该是常成员函数

  指向常对象的指针可作为函数参数,这样可以保证不会在被调用函数中通过指针改变调用函数的值

  pd->Print() = (*pd).Print

14.this指针

  用来指向正在被某个成员函数所操作的对象, 它的值是当前被调用的成员函数所在的对象的起始地址

  使用情况:在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this

       另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)

15.对象引用

  定义:A &ra=a;

  对象的引用常用来作函数的形参,其实参为对象名

  引用调用有传址调用的机制和特点,而比传址调用更简单和方便

 16.对象数组

  数组内放对象

  定义:A a[5];

  1)对象指针数组 

    定义:A *a[4]  数组元素是指向对象的指针

  2)指向对象数组的指针

    定义:A (*a)[4]  指向数组的指针

17.子对象

  在一个类中可以使用另一个类的对象做其数据成员

  当一个类中出现了对象成员时,该构造函数就要包含给子对象的初始化

  A (int i,int j):b(i,j)

  必须放在成员初始化列表中的有常数据成员和子对象,多个初始化项用逗号隔开

  构造函数所在类的数据成员的初始化既可放在成员初始化列表中,也可以放在构造函数的函数体内

18.堆对象

  1)用new创建一个对象或其他类型变量

    new A 或者 new int

    new运算符组成的表达式的值是一个地址值,通常将它赋给一个同类型的指针,于是这个指针便指向所创建的对象或变量

  2)用new创建一个对象数组或其他类型数组

    new A[10] 或者 new int[10]

  3)用delete释放对象或变量

    delete p

    将p所指的对象或变量释放掉

  4)用delete释放对象数组或其他类型数组

    delete [] p

    将p所指向的对象数组或变量数组多占的内存空间释放掉,一次释放一个数组

原文地址:https://www.cnblogs.com/syyy/p/6075000.html