类与对象
1.基本概念
类是用户定义的数据和操作这些数据的函数的封装
类的定义包括行为和属性两个部分
属性以数据表示,行为通过函数实现
因通过结构生成新的数据类型存在建立变量时没有初始化机制,另因类型定义和数据处理的分离,修改数据或修改函数都可能引起程序错误,不能保证数据的正常性和保持对数据处理的一致性
注意:类的成员可以是其他类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类的成员
为什么要初始化?
静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配空间
类定义的说明语句一般形式为
class<类名>
{
Public:
公有段数据成员和成员函数;//类中和类外可见
Protect:
保护段数据成员和成员函数;//类中和派生类中可见
Private:
私有段数据成员和成员函数;//类中可见
};//以分号结束类定义语句
//私有段成员放在第一段可以省略private
//Struck也可以用来定义类,若不特别指出,则所有成员都是公有的
成员函数
类的成员函数是实现类的行为属性的成员
成员函数的定义:
返回值类型类名::成员函数名(参数表)
{
函数体
}
对象
对象是类的实例或实体
注意:必须在定义了类之后,才可以定义类的对象
注意事项:
类的任何成员都必须指定访问属性,一般将数据成员定义为私有成员或保护成员,将成员函数定义为公有成员
Class成员缺省情况是private
Struck成员缺省是public
内联函数
作用:减少频繁调用小子程序的运行时间开销
内联函数声明:inline 函数原型
注:仅在函数原型作一次声明
适用于1~5行小程序
不复杂,不递归
函数重载
函数名相同,但参数不相同(类型不同或者个数不同)的一组函数
编译器根据不同参数的类型和个数产生调用匹配
函数重载用于处理不同数据类型的类似任务
Int abs(int a)
Doubl abs(double f);
Intmain()
{cout<<abs(-5)<<endl;
Cout<<abs(-7.8)<<endl;}//类型不同
关于get set函数的相关
因不能直接访问私有成员,所以需要构造set get函数(在公有成员函数中)迂回一下
Voidsetx(floot _x)
{x=_x;
}//p1.setx(1)
//在主函数里声明了一个point的对象//point p1
floatgetx()
{returnx;
}//cout<<p1.x<<endl
访问对象成员
使用对象包括访问对象的数据成员和调用成员函数,运算符“.”“->”用于访问对象成员。
This指针
C++为成员函数提供了一个称为this的隐含指针参数,所以,我们常常称成员函数拥有this指针。
当一个对象调用类的成员函数时,对象的地址被传递给this指针,即this指针指向了该对象,this是一个隐含指针,不能显式说明,但可以在成员函数中显式使用。
构造函数和析构函数
由于类体系结构的复杂性,建立对象的初始化工作和释放对象资源的变化很大,因此,通常需要用户自定义构造函数和析构函数,它们是类的特殊成员函数。
构造函数的作用是:为对象分配空间,为成员函数赋初值,请求其他资源
一个类只允许一个析构函数不能有参数,也不能有返回值,作用是完成一个清理工作,释放空间
构造函数(函数名和类名相同)建立一个对象时,作某些初始化工作(对数据赋予初值),不能指定返回类型
构造函数和析构函数不能定义在私有部分
原型:
类名::类名(参数表);
类名::~类名();
如果类中没有定义构造函数,系统将自动生成一个默认形式的构造函数,用于创建对象,默认构造函数形式:
类名::类名(){}//默认构造函数是一个空函数
#include<iostream>
Classdate{
Public:
Date();//无参构造函数
Date(inty,int m,int d);
Voidshowdate();
Private:
Intyear,month,day;
};
Date::date()//构造函数的实现
{year();month=0;day=0;}
Date::date(inty,int mint d)
{year=y;month=m;day=d;}
Inlinevoid date::showdate()
{cout<<year<<“·”······}
构造函数的初始化列表
1.使用构造函数的函数体进行初始化
2.使用构造函数的初始化列表进行初始化
Classdate
{ intd,m,y;//1.
Public......
初始化列表的形式:
成员名1(形参名1),成员名2(形参名2)....
Class date
{int d,m,y;
Public:
Date(int dd,int mm):d(dd),m(mm),y(yy)
{ }
静态成员函数
静态成员不属于一个单独的对象,而是为类的所有对象公有的
静态数据成员在定义或说明时前面加关键字static,如:
Class A
{
Int n;
Staticint s;
};
2. 心得体会
类作为初接触c++的基本内容,确实很难理解,到目前为止,我也不能独立写出一个系统,这一类型的知识十分零散,也因此增大了学习难度,可以尝试慢慢梳理清楚知识点,在我写这个博客的过程中,发现自己对很多知识点了解的非常片面,只浮于表面,实际上它所实现的功能与我的认知有很大的偏差,反映出我学习的不严谨性,接下来就要开始慢慢做系统了,不能让不会的知识点像滚雪球一样越滚越大。
对定义不用逐字逐句的背过,但一定要用自己的语言阐释出它的作用,这样才能做到真正理解,才能写出程序。
类定义中一个很重要的点就是初始化,而对于初始化,可以说是所有知识点中我学的最差的了,因为无法理解初始化的作用和在程序中的分量,可能未来的几天我会单独写一个关于类中数据初始化的总结博客。