c++类与对象总结

面向对象的特点:封装、继承、多态

1、类的定义

类定义的一般形式为:class 类名
  private :
  数据成员或成员函数
  protected :
  数据成员或成员函数
  public :
  数据成员或成员函数friend 其他函数或类名
};
<各成员函数的实现代码>
其中,class是定义类的关键字。类名是一个有效的标志符,且一般首字母大写。大括号括起来的部分是类说明部分,它声明了类的所有成员(包括数据成员和函数成员),这些成员从访问权限上分成三类,即私有(private)、公有(public) 和保护(protected),其中默认权限为private。

类的private部分说明的成员,在类之外是不能存取的,只有类中的成员函数才能存取private的数据成员和成员函数。类的public部分说明的成员,可被程序中的任何函数或语句存取,public成员多为成员函数,用来提供一个与外界的接口,外界只有通过这个接口才可以实现对private成员的存取。类的nrotected部分说明的成员,不能在类之外存取,只有类的成员函数及其子类(派生类) 可以存取protected 的成员。 

2、成员函数的定义

类中的成员函数可以在两处定义:
一是将成员函数的定义直接写在类中,  一般适合于成员函数规模较小的情况;
二是在类的定义体中只写出成员函数的原型说明,  而成员函数的定义写在类的定义之外,这种情况比较适合于成员函数体较大的情况,其定义格式为:
返回值类型类名: :成员函数名(参数说明)
{
  函数体; 

}

3、对象成员的访问

访问对象的成员有以下两种格式:
(1)  对象名.成员名
(2)  指针变量名->成员名
第一种格式是利用对象和运算符".'访问成员; 而第二种格式是采用指向对象的指针和运算符  ->”来访问成员,并且第二种格式中的指针变量必须已指向某个对象。 
4、指针
(1)、类成员指针:

   类数据成员指针的定义格式如下:类型类名: :*指针变量名;
  此处的“类型”要与类中数据成员的类型保持一致。
  要使已经定义的类数据成员的指针变量指向类中某个数据成员时,可以通过以下语句:
  类数据成员指针变量名=&类名: :类数据成员变量名;
  当类数据成员指针变量已经指向类中某个数据成员时,可以通过以下语句访问类中数据成员:对象名.*类数据成员指针变量名;
  (2)、this指针
  在每一个类成员函数的形参表中都有一个隐含的指针变量this,该指针变量的类型就是成员函数所属类的类型。当程序中调用成     员函数时,this指针变量被自动初始化为发出函数调用的对象的地址。
  尽管我们在定义成员函数时没有看到this指针变量,也没有定义this指针变量,但是在成员函数的函数体内我们可以使用this指   针变量,  因为该指针变量使系统隐含给出的,我们不需要也不能在成员函数的形参表中对this指针变量进行显示说明。 类中成   员函数有了隐含的指针变量this后,就可以保证用不同的对象调用成员函数是对不同对象的操作。
5、构造函数和析构函数
构造函数:
构造函数是用于创建对象的特殊成员函数,当创建对象时,系统自动调用构造函数。
构造函数的作用是:  为对象分配空间; 对数据成员赋初值; 请求其他资源。
没有用户定义的构造函数时,系统提供缺省版本的构造函数。
构造函数名与类名相同: 类名。
构造函数可以重载。
构造函数可以有任意类型的参数,但没有返回类型。 
析构函数:
析构函数是用于取消对象的成员函数,当一个对象作用域结束时,系统自动调用析构函数。
析构函数的作用是进行对象消亡时的清理工作。
没有用户定义析构函数时,系统提供缺省版本的析构函数。
析构函数名为:~ 类名。
析构函数没有参数,也没有返回类型。
6、深复制与浅复制
浅复制:在用一个对象初始化另一个对象时,只复制了数据成员,而没有复制资源,使两个对象同时指向了同一资源的复制方式称为浅复制。
即: 对于复杂类型的数据成员只复制了存储地址而没有复制存储内容。
默认复制构造函数所进行的是简单数据复制,即浅复制。

自定义复制构造函数所进行的复制是浅复制。

深复制:通过一个对象初始化另一个对象时,不仅复制了数据成员,也复制了资源的复制方式称为深复制。

7、常成员

 (1) 常数据成员
 使用const说明的数据成员称为常数据成员。

 如果在一个类中说明了常数据成员,那么构造函数就只能通过初始化列表对该数据成员进行初始化,而任何其他函数都不能对该  成员赋值。

 (2) 常对象
 如果在说明对象时用const修饰,则被说明的对象为常对象。
 常对象的说明形式如下:
 类名const 对象名[(参数表)];
 或者const类名对象名[(参数表)];
 在定义常对象时必须进行初始化,而且不能被更新。
 说明:
 (1) C++不允许直接或间接更改常对象的数据成员。
 (2) C++规定常对象只能调用它的常成员函数、静态成员函数、构造函数(具有公有访问权限)。 
 (3) 常成员函数
 在类中使用关键字const说明的函数为常成员函数,常成员函数的说明格式如下:
 类型说明符函数名(参数表) const;
 const是函数类型的一个组成部分,因此在函数的实现部分也要带关键字const。
 常成员函数不能更新对象的数据,  也不能调用非const修饰的成员函数(静态成员函数、构造函数除外) 。
8、静态成员
类成员冠以static声明时,称为静态成员。
静态数据成员为同类对象共享。
静态成员函数与静态数据成员协同操作。
静态成员不属于某一个单独的对象,而是为类的所有对象所共有。
静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员: 保证在不依赖于某个对象的情况下,访问静态据成员 。
9、友元
如果在本类(类A) 以外的其他地方定义了一个函数(函数B)
这个函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数,
在类体中用friend对其(函数B) 进行声明,此函数就称为本类(类A) 的友元函数。
友元函数(函数B) 可以访问这个类(类A) 中的私有成员.
10、类的包含
类的包含是程序设计中一种软件重用技术。即定义一个新的类时,通过编译器把另一个类
 抄”进来。
当一个类中含有已经定义的类类型成员,带参数的构造函数对数据成员初始化的语法形式:
构造函数(形参表): 对象成员1(形参表),....对象成员n (形参表) ;
初始化顺序: 先初始化被包含的对象成员再初始化本身的数据成员。 





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值