《C++大学教材》学习笔记 第三章:类和对象介绍
2013-02-21 19:04
183 查看
学习笔记:
1、C++中类定义的实例:
注释②:C++中声明一个类的对象时不用new,而是直接声明就可以了。如果要传参数给该类的构造方法,则这样写:GradeBook myGradeBook("My Grade");
2、cin 和流提取运算符(<< 或 >>)配合运用时,它读取字符直到第一个空白间隔符为止。如果要读取整行数据,可以使用<string>包中的 getLine(cin,str) 方法。
3、软件工程知识:类的数据成员应该被声明为私有的(private)的,而成员函数则为共有的(public)。要操作类中的数据成员,必须通过成员函数来调用。而所有成员函数修改数据成员时最好通过set***() 方法进行修改,虽然说可以通过其他成员函数直接赋值给数据成员,但其他数据成员无法对数据的完整性等进行检查。
4、软件工程知识:对类的数据成员赋值时通过set*** 方法可以对传入的数据进行『完整性检查』、『非法检查』等检测,大大提高了程序数据的安全性。
5、预编译中的 #include <> 命令和 #include "" 命令的区别:#include <headFile>命令指示预处理器headFile头文件属于C++标准库,它直接到其标准库中寻找headFile文件,而不会去被预处理的这个程序所在目录中寻找。而#include "headFile"首先会试着在该#include指令出现的文件所在的目录下寻找该头文件,如果找不到,那么它会继续在C++标准库头文件所在的目录下搜索。
6、一个类对应一个独立文件的可复用性
当我们写一个类时,我们可以只写其类定义,而不写main函数,这样我们就可以再其他类中引用该类,从而实现程序的复用。通常这样一个不带main的类的后缀名都写成”class.h“的形式,如"GradeBook.h”。我们只需要在其他类中的头部加上“#include GradeBook.h”便可调用该类的成员函数,非常方便。
7、接口与实现的分离
C++中的类可以实现类的定义和类的实现以及类的调动三者分离的效果。
这样做的目的是为了隐藏类中成员函数的具体实现细节,因为客户端程序员不需要知道成员函数怎么实现,他只需要知道该成员函数需要什么参数,返回什么值,即可。(而这些信息在类的定义,即接口,中就可以得到)
例子如下:
①GradeBook.h:接口 的定义:
C++中的接口定义、接口实现、接口调用之间的编译和连接过程:首先,由一个程序员创建和编译类的接口(GradeBook.h);接着,由类实现程序员实现接口(GradeBook.cpp);最后,由客户代码程序员编写客户端代码(test.cpp)。
为了隐藏 GradeBook 成员函数的实现细节,类实现程序员只向客户代码程序员提供头文件 GradeBook.h (它列出了类的接口和数据成员)和 GradeBook 类的目标代码(即编译后的文件)。当客户代码程序员写好main函数后,编译器将
①main函数的目标代码
②GradeBook类成员函数实现的目标代码
③类实现程序员和客户代码程序员使用的C++类的C++标准库目标代码
(这里的编译和连接过程,书里说得不是很清楚,还有点模糊)
连接起来,生成可执行程序。
6、类的UML图
(待补充)
编程习惯:
1、函数名通常以小写开头,后面每个单词词首大写。
2、类名开头大写,后面每个单词词首大写。
疑问:
1、C++中的 包 和 命名空间 和 类 是什么关系?
2、类的接口定义、接口实现、接口调用之间的编译和连接中 编译和连接过程有点模糊?
1、C++中类定义的实例:
//Example of defining class GradeBook #include <iostream> using namespace std; //using 引用 //GradeBook class definition class GradeBook { public : //fucunction displayMessage void displayMessage() { cout << "Welcome to the Grade Book!" << endl; } //end function displaysMessage }; //end class 『注释①』 //function main begins begins program execution int main() { GradeBook myGradeBook; //create a GradeBook object named myGradeBook . 『注释②』 myGradeBook.displayMessage(); } //end main注释①:C++中的类定义结束后,需要用分号(;)表示结束。
注释②:C++中声明一个类的对象时不用new,而是直接声明就可以了。如果要传参数给该类的构造方法,则这样写:GradeBook myGradeBook("My Grade");
2、cin 和流提取运算符(<< 或 >>)配合运用时,它读取字符直到第一个空白间隔符为止。如果要读取整行数据,可以使用<string>包中的 getLine(cin,str) 方法。
3、软件工程知识:类的数据成员应该被声明为私有的(private)的,而成员函数则为共有的(public)。要操作类中的数据成员,必须通过成员函数来调用。而所有成员函数修改数据成员时最好通过set***() 方法进行修改,虽然说可以通过其他成员函数直接赋值给数据成员,但其他数据成员无法对数据的完整性等进行检查。
4、软件工程知识:对类的数据成员赋值时通过set*** 方法可以对传入的数据进行『完整性检查』、『非法检查』等检测,大大提高了程序数据的安全性。
5、预编译中的 #include <> 命令和 #include "" 命令的区别:#include <headFile>命令指示预处理器headFile头文件属于C++标准库,它直接到其标准库中寻找headFile文件,而不会去被预处理的这个程序所在目录中寻找。而#include "headFile"首先会试着在该#include指令出现的文件所在的目录下寻找该头文件,如果找不到,那么它会继续在C++标准库头文件所在的目录下搜索。
6、一个类对应一个独立文件的可复用性
当我们写一个类时,我们可以只写其类定义,而不写main函数,这样我们就可以再其他类中引用该类,从而实现程序的复用。通常这样一个不带main的类的后缀名都写成”class.h“的形式,如"GradeBook.h”。我们只需要在其他类中的头部加上“#include GradeBook.h”便可调用该类的成员函数,非常方便。
7、接口与实现的分离
C++中的类可以实现类的定义和类的实现以及类的调动三者分离的效果。
这样做的目的是为了隐藏类中成员函数的具体实现细节,因为客户端程序员不需要知道成员函数怎么实现,他只需要知道该成员函数需要什么参数,返回什么值,即可。(而这些信息在类的定义,即接口,中就可以得到)
例子如下:
①GradeBook.h:接口 的定义:
//GradeBook接口类 定义 #include <string> using namespace std; //GradeBook Class definition class GradeBook { public: GradeBook(String); //构造函数 注释① void setCourseName(string); string getCourseName(); void displayMessage(); private: string courseName //GradeBook类的属性courseName }; //GradeBook类定义结束 //注释①:C++中函数中形参的名字可以略去,但必须写类型②GradeBook.cpp:在独立的源文件中定义成员函数
//GradeBook.cpp //在独立的源代码文件中定义成员函数 #include <iostream> #include "GradeBook.h" using namespace std; //构造函数实现 GradeBook::GradeBook(string name) { setCourseName(name); } //其他函数实现 void GradeBook::setCourseName(string name) { //这里可对传入的name参数进行合法性检查 courseName=name; } string GradeBook::getCourseName() { return courseName; | void GradeBook::displayMessage() { cout << "Welcome to the grade book for \n" << getCourseName() << "!" <<endl; } //所有函数实现完毕③text.cpp:测试GradeBook类
//test.cpp //测试GradeBook类 #include <iostream> #include "GradeBook.h" //注释① 只需包含"GradeBook.h"类,不需包含“GradeBook.cpp”类 using namespace std; int main() { GradeBook gradeBook1("CS101 Introduction to C++ Programming"); GradeBook gradeBook2("CS102 Data Structures in C++"); cout << "gradeBook1 created for course:" << gradeBook1.getCourseName() << "\ngradeBook2 created for course:" << gradeBook2.getCourseName() << endl ; } //main函数结束
C++中的接口定义、接口实现、接口调用之间的编译和连接过程:首先,由一个程序员创建和编译类的接口(GradeBook.h);接着,由类实现程序员实现接口(GradeBook.cpp);最后,由客户代码程序员编写客户端代码(test.cpp)。
为了隐藏 GradeBook 成员函数的实现细节,类实现程序员只向客户代码程序员提供头文件 GradeBook.h (它列出了类的接口和数据成员)和 GradeBook 类的目标代码(即编译后的文件)。当客户代码程序员写好main函数后,编译器将
①main函数的目标代码
②GradeBook类成员函数实现的目标代码
③类实现程序员和客户代码程序员使用的C++类的C++标准库目标代码
(这里的编译和连接过程,书里说得不是很清楚,还有点模糊)
连接起来,生成可执行程序。
6、类的UML图
(待补充)
编程习惯:
1、函数名通常以小写开头,后面每个单词词首大写。
2、类名开头大写,后面每个单词词首大写。
疑问:
1、C++中的 包 和 命名空间 和 类 是什么关系?
2、类的接口定义、接口实现、接口调用之间的编译和连接中 编译和连接过程有点模糊?
相关文章推荐
- 《Python学习手册》学习笔记(4)之第4章介绍Python对象类型(关键词:编程语言/Python)
- ASP.NET(VB.NET)学习笔记--第三章.ASP.NET常用的内置对象
- blob对象介绍
- ajax中的xmlhttprequest对象介绍
- javascript知识点函数及对象的基本介绍
- Jquery 获取对象的几种方式介绍
- 深入介绍Java对象初始化
- javaScript实现定时显示隐藏、BOM对象方法介绍、表单简单校验、表格换色、DOM、二级联动
- 【深入PHP 面向对象】读书笔记(一) - 发展介绍与对象基础
- iOS7新JavaScriptCore框架入门介绍与对象交互和管理教程
- 02 js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
- DeskBand实现之——对象介绍
- Wscript.Shell对象详细介绍
- Android绘制文本对象FontMetrics介绍及繪製文本 (转)
- MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用
- 对象之int介绍
- 深入介绍Java对象初始化
- 递归算法在javascript中使用的小技巧 (javascript的对象封装方法介绍)
- CSS布局对象之Layout 用法介绍
- android SurfaceHolder与SurfaceView对象介绍