`
chenshuyi
  • 浏览: 29345 次
文章分类
社区版块
存档分类
最新评论

《C++大学教材》学习笔记 第三章:类和对象介绍

 
阅读更多

学习笔记:

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、类的接口定义、接口实现、接口调用之间的编译和连接中 编译和连接过程有点模糊?

分享到:
评论

相关推荐

    深度探索C++对象模型读书笔记

    它包括两个层面的理解:第一层面是C++语言本身提供的面向对象编程的支持,这部分可以从诸如《C++ Primer》这样的教材中学习到;第二层面则是实现面向对象特性的底层机制和技术细节,这一部分往往较少被提及,而本篇...

    c++ primer第4版学习笔记

    《C++ Primer 第4版》是一本经典的C++编程...这份“C++ Primer 第4版”学习笔记包含了所有这些知识点的详细解释和示例,是深入学习C++的理想资料。通过学习和实践,你可以掌握C++编程的基础,并逐步提升到高级水平。

    [学习笔记]C++程序设计教程第二版[钱能].doc

    根据提供的文件信息,我们可以推断出这是一份关于C++程序设计的学习资料,具体来说是《C++程序设计教程第二版》这本书的学习笔记。虽然给定的部分内容仅包含了一些图片占位符和数字(可能是指页码),但我们可以基于...

    C++ Primer 第四版学习笔记.rar

    《C++ Primer 第四版学习笔记》是一份深入学习C++编程语言的宝贵资源,它由一位经验丰富的学习者在2014年整理而成,旨在帮助初学者更有效地掌握C++的基础和进阶概念。这份笔记以清晰、实用的方式阐述了C++ Primer第...

    C++ Primer学习笔记.doc

    《C++ Primer》是C++初学者的经典教材,其学习笔记涵盖了从基础知识到高级特性的全面解析。笔记中,作者采用了一种系统化的学习方法,包括整章阅读、标记重要点、手写草稿和录入电脑,以加深记忆并记录个人思考。 ...

    C++语法学习笔记(至六十一)

    【C++语法学习笔记】 C++是一门强大的编程语言,其语法丰富且严谨。这篇学习笔记主要涵盖了C++的基础知识,包括函数定义、头文件、注释、名称空间、常量、变量、进制转换、基本类型以及常用函数的使用。 1. **函数...

    C++ primer学习笔记一

    本篇学习笔记主要涵盖了前三章的内容,重点关注STL(Standard Template Library,标准模板库)中的容器、特别是vector的使用,以及迭代器的概念。接下来我们将详细探讨这些知识点。 首先,STL是一个强大的工具集,...

    C++语言程序设计笔记.rar

    《C++语言程序设计笔记》是由郑莉教授的课程内容整理而成的学习资料,结合了清华大学的教学视频和教材,旨在帮助自学者和准备考研复试的学生深入理解C++这门面向对象编程语言。这份笔记包含了丰富的知识内容,以下是...

    C++ primer(第四版)学习笔记

    【C++ Primer(第四版)学习笔记】 C++ Primer 是一本经典的C++入门教材,第四版则更加注重现代C++的实践与应用。本学习笔记系列着重探讨那些易被忽视或容易导致误解的C++概念,适合已经具备一定C++基础的读者。 #...

    钱能C++程序设计教程第二版课后答案

    《钱能C++程序设计教程第二版》是一本深受编程初学者欢迎的教材,它深入浅出地介绍了C++这门强大的编程语言。C++是C语言的扩展,增加了类和对象的概念,使得编程更加面向对象,同时也保留了C语言的高效性。此教程的...

    C++语言程序设计-郑莉-课后习题答案.pdf

    《C++语言程序设计》是郑莉教授的教材,该书涵盖了C++语言的基础和高级概念,特别是面向对象编程的原理。课后习题解答旨在帮助学生深入理解课程内容。 1. 计算机程序设计语言的发展历程:从机器语言到汇编语言,再...

    C++ Primer 笔记

    《C++ Primer》是C++编程领域的一本经典教材,主要面向初学者和有经验的程序员,通过系统的学习,读者可以全面掌握C++语言的基础知识和高级特性。这份笔记是作者在阅读过程中对书中的重要概念、关键语法和实用技巧所...

    CPrimer中文版(第四版)学习笔记收集.pdf

    标题《C++ Primer中文版(第四版)学习笔记收集.pdf》表明这份文档是关于C++语言学习的笔记整理,参考的是经典教材《C++ Primer》的第四版。这份笔记将涵盖该书中重要的知识点和示例,对于学习C++基础语法和面向对象...

    java lecture note(Java学习笔记)

    #### 第三周至第四周:面向对象编程(OOP)原理 - **继承**:理解类的继承机制,掌握super关键字的使用。 - **多态性**:探索接口、抽象类和动态绑定,理解多态性的实现方式。 - **封装**与**抽象**:深入理解封装的...

    钱能c++程序设计第二版代码和课件

    《钱能C++程序设计第二版》是一本深入浅出的C++编程教材,它旨在帮助初学者和有一定基础的学习者掌握C++语言的核心概念、语法结构以及编程实践。本书结合了理论与实践,提供了丰富的代码示例和课件,以帮助读者更好...

    the C++ programming language Third Edition(完整书签)

    《C++编程语言》第三版不仅是一本优秀的入门教材,也是每个C++程序员不可或缺的参考书。通过系统地学习本书中的知识点,读者不仅能掌握C++的基本语法,还能深入了解C++的强大特性和设计理念,从而编写出高质量的代码...

    《算法导论》第二版中文全集,含:全世界唯一带“完整”目录的版本,代码。第3部分(共4部分)。学好核心技术,既为自己,也为天空不落下别国的炸弹

    《算法导论》(Introduction to Algorithms)原书第二版 Thomas H Cormen(科曼) Charles E Leiserson Ronald L Rivest Clifford Stein著 南京大学潘金贵 顾铁成 李成法 叶懋等译 机械工业出版社 2006 本书简称CLRS...

    易学C++ PDF版和Word版

    3. **类与对象**:C++是一种面向对象的编程语言,类是对象的模板,对象则是类的实例。掌握封装、继承和多态这三大面向对象特性,是深入理解C++的关键。 4. **内存管理**:包括动态内存分配(new和delete)、栈与堆...

    C++程序设计经典教程

    因此,读者需要结合《C++语言程序设计》第三版或谭浩强等人的电子讲义进行实践,通过编写代码来加深对知识点的理解。 从数据类型到控制结构,从函数到类,再到异常处理,教程的编排旨在让读者由浅入深、循序渐进地...

    Python编程笔记 Python开发知识总结整理 Python核心笔记 共51页.pdf

    第三章“Python基础”将介绍变量、数据类型、操作符、流程控制语句等基本概念。第四章“Python对象”会深入讨论对象和类的概念,这是Python面向对象编程的基础。第五章“数字”涉及整型、浮点型、复数等数值类型及其...

Global site tag (gtag.js) - Google Analytics