C++笔记 02
学习C++的记录
C++类与对象
C++的主题,类与对象。只是简介,偏重概念理解
学习笔记以 *.cpp源文件注释
的形式记录。
抽象为对象
封装
继承与派生
多态
其它
访问成员
目的对象
内联函数
/*
面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽象出一类对象的公共性质并加以描述的过程。
对一个问题的抽象应该包括两个方面:数据抽象和行为抽象(或称为功能抽象、代码抽象)。前者描述某类对象的属性或状态,也就是此类对象区别于彼类对象的特征;后者描述的是某类对象的共同行为或功能特征。
*/
/*
封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作的函数代码进行有机结合,形成类,其中的数据和函数都是类的成员
封装使一部分成员充当类与外部的接口,而将其他成员隐蔽起来,这样就达到了对成员访问权限的合理控制
-----------------------------------------------------------------------------------------------------------------
就像SDK(Software Development Kit,软件开发工具包)与
API(Application Programming Interface,应用程序接口)
DLL,即Dynamic Link Library(动态链接库)。就是*.dll文件,也是一种可执行文件格式,但只能在*.exe中使用。为了使用DLL中的API函数,必须要有API函数的声明(.h)和其导入库(.lib,为了在DLL中找到API的入口)
而SDK正是提供了一整套开发Windows应用程序所需的相关文件、范例和工具的“工具包”。
游戏中就有很多SDK工具包,可以开发MOD和资料片。
*/
/*
继承可以在一般概念基础上,派生出特殊概念,C++中的类的继承,允许程序员在保持原有类特性的基础上,进行更具体更详细的说明
------------------------------------------------第七章----------------------------------------------------------
继承更符合逻辑,也提高了代码重用,代码更加易读,适用
*/
/*
多态性是指一段程序能够处理多种类型对象的能力。
C++中可以通过强制多态、重载多态、类型参数化多态、包含多态4种形式来实现。
强制多态是通过将一种类型的数据转换成另一种类型的数据来实现的,也就是数据类型转换。
重载是指给同一个名字赋予不同的含义,函数重载,运算符重载----------第八章------------
这两种多态属于特殊多态性,只是表面的多态性
包含多态和类形参化多态属于一般多态性,是真正的多态性,C++采用虚函数实现包含多态--------------------------------------------------第八章--------------------------------------------------
模板是C++实现参数化多态性的工具,分为函数模板和类模板两种,STL丰富功能的实现就是使用了模板---------------------------------------第九章------------------------------------------
*/
/*
面向过程的结构化程序设计中的程序模块:
函数=逻辑上相关的 语句+数据 的封装 -> 完成特定的功能
面向对象的程序设计中的程序模块:
类=逻辑上相关的 函数+数据 的封装 -> 抽象描述问题
*/
/*
访问类中的数据成员:对象名.数据成员名
调用类中的函数成员:对象名.函数成员名(参数表)
成员函数的声明在类体中,特殊的函数:构造函数,析构函数,复制构造函数。委托构造函数等是类中独有的,有各自特殊的声明格式,及调用方式,也有相应的默认函数
成员函数的实现:
返回值类型 类名::函数成员名(参数表){
函数体
}
目的对象: 调用时使用"."操作符指出所针对的对象,而这一对象在本次调用中成为目的对象. 成员函数中可以不使用"."操作符而直接引用目的对象的数据成员,引用其他对象时的属性,调用其他对象的方法时,都需要使用"."操作符. 注意在类的成员函数中既可以访问目的对象的私有成员, 又可以访问当前类的其他对象的私有成员
带默认形参值的成员函数
内联函数:
隐式声明: 将函数体直接放在类体内
显示声明: 为保证类定义的简结, 可采用关键字inline
效果相同
只是一种对编译器的建议,同时编译器也会自动将结构简单又反复调用的函数作为内联函数
*/
//时钟类的实现
#include<iostream>
#include<iomanip> //输出格式控制
using namespace std; //C++标准库
class Clock {
public:
bool setTime(int newH, int newM);
void showTime();
void createclock(int H, int M = 0);
void createclock();
private:
/*默认值 int hour=0,int minute =0*/
int hour=0, minute=0;
};
bool Clock::setTime(int newH = 0, int newM = 0) {
if (newH <= 24 && newM <= 60 && newH >= 0 && newM >= 0) {
hour = newH;
minute = newM;
return true;
}
else return false;
}
void Clock::showTime() {
cout << "the time is:" << endl
<< "\t\t"
<< setw(2) << setfill('0') <<hour << ":" << setw(2) << minute << endl;
//endl清空缓冲区的数据流缓冲区的数据“即刻”输出到显示屏
}
void Clock::createclock(int H, int M) {
if (setTime(H, M)) {
showTime();
}
else cout << "Wrong!!!" << endl;
}
//重载
void Clock::createclock() {
cout << "cin your hour & minute pleace..." << endl;
int H, M;
if(2 == scanf_s("%d%d", &H, &M)){
createclock(H, M);
}
}
int main() {
Clock myclock[3];
myclock[0].createclock(18, 3);
myclock[1].createclock(25, 7);
myclock[2].createclock();
return 0;
}