c++类学习总结

在定义一个类的时候需要将问题的普遍问题抽象出来让类的成员函数能做"普通"的操作不然会把程序写死只能处理某种特定的情况。在写类的时候每增加一个成员函数都要对该函数进行测试然后对所有的函数进行联调要不然在把所有函数写出来在进行调试工作量会很大而且也不容易找错。
一、类的定义
类的基本思想是数据抽象和封装。数据抽象是一种依赖接口和实现分离编程的技术。类的接口包括用户能执行的操作,类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数,
定义方式

class  类名
{
   public:
             公有数据成员和成员函数;类的接口
   protected:
           保护数据成员和成员函数;
   private: 
           私有数据成员和成员函数;
};//注意一定不要忘记分号

class和struct定义的类稍有区别class的成员没有访问限定符(public,private,protected)时会默认成员为私有成员,struct会默认为公有成员
成员函数
在类外定义时要在函数名字前加类的名字和作用域符(::)来表示这个函数是在其所属的类作用域内。
在类内定义的成员函数默认为inline函数(内联函数)如果要在类外定义inline函数需要显式的在函数声明或定义前加关键字inline。成员函数也可以重载典型的如构造函数。
访问控制和封装
访问限定符
public:公有成员成员在任何函数或类中都可以被访问。
private:成员只能由类自己的成员函数或友元访问
protect访问权限介于public和prrivate之间。
类和控制
将数据和操作捆绑在一起并加上访问控制,这在面向对象中成为封装。对象是数据和操作的封装体对象就是类的实例就像int a中的a一样。一个类的每个对象共用成员函数即整个类存储一份成员函数用时就调用。空类(类中不含任何数据)也需要空间来存储。
对象使用成员时可以通过"."(对象名.公有成员)或者指针->公有成员。
this指针
每个成员函数都有一个隐含的参数,指向接收消息的对象称为this指针。
X类的this指针的类型是X*
this指针式一个常量含有当前对象的地址不能取它的值也不能改,常用于区分与局部变量重名的数据成员,返回当前对象,获取当前对象的地址。
访问器和修改器
因为对象的封装性private的成员函数无法直接访问于是就需要一种public函数来对他们进行访问和修改这就是访问器和修改器。
友元
让非成员函数访问一个类中的私有数据,需要在类中将这个函数声明为友元用friend关键字
友元必须在被访问的类中声明。一个类的友元可以是全局函数另一个类的成员函数或另一个类。

构造函数和析构函数
构造函数是一种特殊的成员函数,在创建对象时被自动调用,负责对象的初始化,构造函数的的名字和类名字相同他没有返回类型(不是void)构造函数可以重载在创建对象时编译器会根据初始值的类型和个数来调用相应的构造函数。构造函数至少要写两个一个不带参数的(必写哪怕是个空函数)一个带参数的 构造函数初始化列表

类名(){} 
类名(参数表):初始化列表{函数体}
eg      X(int a):r(a),g(a){h(a)};//初始化的时候是根据成员数据定义的顺序初始化
必须使用初始化的  引用成员 const类型的成员未提供默认构造函数的类类型其他的都可以在刚定义的时候赋予初值

函数体内也可进行其他操作如调用其它函数对数组的清空。
析构函数(一般不需要显式的调用)
析构函数负责在对象生存期结束时返回相关资源和自动释放资源,当对象离开作用域时或者用delete释放在堆上创建的对象时,析构函数都会被自动调用。析构函数的名字时类名字前加"~",析构函数没有返回类型没有参数不能重载只能定义一个唯一的析构函数如果没有定义析构函数,编译器在需要时会自动合成一个析构函数(空函数)

const成员
const数据成员用来描述对象中的常量,只能在构造函数初始化列表中初始化并且一旦初始化就不能更改。
const函数 将一个成员函数声明为const表明这个成员函数不会修改对象的数据成员,能保证对象的常量性
声明形式:

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

定义形式:

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

const成员函数中不能修改类的数据成员,也不能调用其它非const成员函数(因为非const成员函数有可能会改变数据成员这样就会间接的改变数据成员导致编译出错)(ps const成员函数可以改变static成员的值)
只有声明为const的成员函数才可以被const对象调用,const对象不能调用非const成员函数,但是非const对象可以调用const成员函数(这个地方比较绕应该多看几遍加深理解!!!)
(psC++规定常对象只能调用它的常成员函数、静态成员函数、构造函数(具有公有访问权限)
如果一个成员函数是const的,则const对象可以调用它,非const对象也可以调用它,不会改变对象中的成员。)

static成员
静态数据成员被当作类内的"全局变量";对非static数据成员每个对象都有一个自己的副本,而static数据成员则属于整个类并不在某个单独的对象中存在每个对象对它的操作都会使整体的static改变。
static数据成员对整个类类型只有一个由这个类型所有的对象共享访问。
初始化 static数据成员属于类,不属于某个特定对象因而不能再构造函数中初始化;所以需要在类定义之外初始化使用类名字限定但不需要重复用static限定(如果未初始化则编译器自动赋初值默认为0字符串默认为空)

eg
class lei
{
		static int sount;
public:
		其他操作;
};
int lei::count=0;

类的定义一般不放在头文件中,而是放在包含函数定义的源文件中。
static const成员
初始化也是在类外但是可以在类内初始化整形的static const。
静态数据成员的访问
类名::静态成员名(静态成员只有一个副本,因此可以直接用类名字限定的静态成员名字访问)
对象名.静态成员名,对象指针->静态成员名。
static成员函数
在声明时需要加关键字在类外定义时不需要加。调用函数和访问数据成员类似 。
static成员函数没有this指针;静态成员函数中不能访问非静态数据成员,也不能调用非静态成员函数。
静态成员函数不能声明为const或volatile。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值