类产生的原因及相关特性

类产生的原因及相关特性

类的产生

类的产生其实就是为了用户方便定义自己的数据类型,类性质和C++中的标准库类型如String类型是一样的。
可使用关键字class或struct来定义类,二者唯一的差别就是类内部成员的默认访问级别,默认情况下struct的成员为public,而class成员为private。

类的基本思想

数据抽象和封装是类的基本思想。
数据抽象是一种接口和实现分离的编程技术。类的设计者关注类内部具体的实现过程,而类的使用者只需要知道如何使用该类以及该类可以做些什么,而不需要关注具体的实现过程。
封装就是将低层次的元素组合起来形成新的,高层次实体。函数就是封装的一种形式,可以调用一个函数但不能访问他所执行的语句。同样,类也是封装的实体。
C++中,通过使用访问标号(public,protected,private)来定义类的抽象接口和实施封装。一般把函数放在public部分,这样程序的任何代码都可以调用这些函数。把数据成员放在private部分。子类与程序中其他部分一样,只能访问基类的public部分,不能访问private部分。如果基类希望子类能够访问某些成员,但仍不希望程序中其他部分去访问这些成员的话,可将这些成员设置为protected即可。
使用抽象与封装的优点: 1.仅在类的私有部分定义数据成员,类的设计者就可以自由修改这些数据,并且只有成员函数能修改这些数据,容易定位bug。

类的声明与定义

将类的定义放在头文件中,这样可以保证每个使用该类的文件均能以相同的方式定义该类,使用头文件保护符来保证即使头文件在同一文件中被包含多次,类的定义也只出现一次。

类的构造函数

构造函数是特殊的成员函数,创建类类型的新对象时,默认执行构造函数。构造函数没有返回值,函数名与类名相同。
构造函数可以被重载,使得用户可以通过不同的方式来初始化数据成员。
由于构造函数的目的在于初始化对象的数据成员,所以构造函数不能声明为常量成员函数(形参列表后有const修饰)。这是因为函数的执行必须依靠对象,类的成员函数默认有一个this指针,指向调用该成员函数的对象的地址,而常量成员函数修改了隐藏的this指针类型,使其指向的对象的成员不可改变!!!!而构造函数的作用就是用来改变对象的数据成员,所以构造函数不能定义为常量成员函数!!!!
在构造函数中,按照与变量声明一致的次序编写构造函数初始化列表是个好主意。
默认构造函数 :为所有形参提供默认实参的构造函数,一个类只有没有定义任何构造函数时,编译器才会自动生成一个默认的构造函数。
类成员的显示初始化 对于没有定义构造函数且全体数据成员均为public的类,可采用与初始化数组元素相同的方式初始化其成员:

struct Data{
int ipal;
char *ptr
};
Data val = {1024,"test"};

默认构造函数初始化成员的过程 :对于类类型的成员(如string)通过运行各自的默认构造函数来进行初始化。只对全局作用域中的内置和符合类型的成员,如指针和数组进行初始化。所以,如果类包含内置或复合类型成员,则该类最好定义自己的构造函数来初始化这些成员,否则那些局部作用域中的内置或复合类型成员不能完成初始化。

默认构造函数的使用 假设已定义类Sales_item,则可使用以下两种方式使用默认构造函数来创建一个对象:

Sales_item myobj;
Sales_item myobj = Sales_item;

与类有关的三个新特征

友元
友元机制允许一个类将其非公有成员的访问权限授予指定的函数。友元声明以关键字friend开始。友元声明只能出现在类的内部,但不属于类的成员,所以可以出现在类内部的任何位置不受访问权限控制。
例如:

class Screen
{
	friend class Window_Mgr;
};

则以上代码使得类Window_Mgr的成员可以访问Screen类的私有成员‘

可变成员
静态成员
静态成员属于类,不属于任何对象,由给定类的全体对象所共享。
static成员函数 属于类而不是属于对象,所以没有this指针,也不能定义为常量成员函数,毕竟常量成员函数改变了this指针的性质,使其指向的对象不可改变。
static数据成员
不管是static成员函数,还是static数据成员,关键字static只能出现在类内部的声明中,不能出现在类外部的定义中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值