本文章主要学习c++类与对象的基本概念。根据视频学习
MOOC第八章内容
抽象是为了对具体问题进行概括,提炼出这一类对象的公共性质并加以描述的过程:
抽象有数据抽象和行为抽象
数据抽象:描述某类对象的属性和状态
行为抽象:描述某类对象的行为或具有的功能
抽象由封装实现,在C++中,由类实现封装
类的定义:
class ClassName
{
数据成员;(表达数据抽象)
函数成员;(表达行为抽象)
}
类内:在类声明之内。
类外:在类声明之外。
为什么使用访问控制符:封装目的是使信息隐蔽,所以不是所有信息都对外可见。
访问控制符有:
public:
公有成员;(类与外部的接口,类内和类外函数都可以访问)
private:
私有成员;(只允许类内函数访问)
protect:
保护成员;(跟私有成员一样)
易错点:类对象属于类外,所以不可以访问私有数据成员和函数,只能访问公有成员。
类的实现:
class ClocK { private: int Hour, Minute, Second; public: void SetTime(int h, int m, int s) { Hour = h; Minute = m; Second = s; } void ShowTime(){ cout << "Current Time:" ; cout << Hour << ":" << Minute << ":" << Second<<endl; } };
类的使用:
类是一种数据成员,类的变量称作类的实例,或对象
定义对象的方式:类名 对象名;
访问类成员的方法:
通过对象访问类成员:
通过指针访问类成员:
int main() { ClocK clock_1, clock_2; clock_1.SetTime(9, 5, 25); clock_2.SetTime(15, 25, 32); clock_1.ShowTime(); clock_2.ShowTime(); return 0; }
ClocK C1(5, 14, 12); Clock& Cr = C1; Cr.ShowTime();
解决数据成员自动初始化问题
例如:时钟类的构造函数
ClocK(int h, int m, int s) { Hour = h; Minute = m; Second = s; }
ClocK(int h, int m, int s):Hour(h),Minute(m),Second(s){}
重载构造函数与缺省构造函数
专门用于处理对象销毁——析构函数
#include<iostream> using namespace std; class CString { private: int len; char* buf; public: CString(int n); ~CString(); void copy(char* src); }; CString::CString(int n) { len = n; buf = new char[n]; } void CString::copy(char* src) { strcpy(buf, src); } CString::~CString() { delete []buf; } void func() { CString obj(64); obj.copy("helloword"); } int main() { func(); return 0; }
该类中创建析构函数是为了清理类对象所指的字符空间。
目的:构造一模一样的类对象
定义:将自己同类对象的引用作为参数进行构造函数的初始化时,该构造函数为拷贝构造函数。
特点:
按例:
#include<iostream> using namespace std; class Point { private: float x, y; public: Point(float a, float b) { x = a; y = b; } //拷贝构造函数的构建 Point(Point& obj) { x = obj.x; y = obj.y; } void Print() { cout << x << endl; } }; int main() { Point obj1(5, 15);//调用普通构造函数 Point obj2(obj1);//调用拷贝构造函数 Point obj3 = obj1;//调用拷贝构造函数 obj1.Print(); obj2.Print(); obj3.Print(); return 0; }
类类型做函数参数的三种方式:
数组的初始化:调用构造函数进行初始化
关键字:static
分类:
静态数据成员:在类内进行定义,在类外进行初始化
特点是属于类,不属于类对象,只有一个空间。在类外访问需使用类作用域符::。类对象不存在时,也可以访问。
静态成员函数:也属于类,没有this指针。
关键字:const
关键词:friend
定义:一个类对象作为另一个类的成员,成员对象为子对象,用初始化列表方式初始子对象