Boolan网C++微专业笔记第一周:侯捷老师从complex类开始入手,主要介绍有关类的各种语法,结合侯捷老师的课程和我之前对C++语言的了解,做笔记如下:
一、以良好的方式编写C++ class。
侯捷老师将C++类的编写划分为两种:
其一为object base: 即为面对单一class的设计。
大致上分为两类:包含指针的类和不包含指针的类。在我目前的水平看来,两个类最大的区别就在于对内存的管理上不包含指针的类并不需要时刻注意管理内存,释放内存,但是包含指针的类一定要记得有new必有delete。
其二为object oriented: 即为面向多重classes的设计,主要研究的式class与class之间的关系。
继承(inheritance)
复合(compostion)
委托(delegation)
二、C++语言的演化。
B[1969]--->C[1972]--->C with Classes[1979]--->C++[1981]
三、类。
类的基本思想是数据抽象(data abstraction)和封装。数据抽象是一种依赖于接口(interface)和实现(implemeion)分离的编程以及设计。
常常听到有人说这句话:“万物皆对象”,有人说这句话的意思是C++中的一切都可以看做对象,但是我认为这句话的意思应该理解现实世界的所有东西,都可以看错是对象(object)对它的一种抽象,比如现在在我眼前的笔记本,它的硬件基础,就是他的属性(arributes),我通过IO与它进行的交互,便是他的行为(behavior),然后相同的一种种类的电脑具有同一性(indentity)。而电脑,在抽象中,即可以看作一个computer类。
四、C++代码的基本形式。
在初级阶段,一个C++工程,一般包括以下三种文件:
head.h:头文件,类以及所有函数的声明在此。
head.cpp:头文件的实现文件。
head.cpp与head.h链接起来便是一个小小的库
main.cpp:源文件
main.cpp与head.cpp通过include与头文件链接。
include<>在 计算机本地库里进行搜索,再搜索用户自己实现的库。
include""在用户自己实现的库种进行搜索。
头文件的写法:
#ifndef __HEAD_H_ //防止多次包含同样的头文件
#define __HEAD_H_
class myClass; //类的声明
type myFun(); //函数的声明
class myClass //类的定义
{
//
//
};
#endif //回应前方的 #ifndef
int myFunc(myClass myclass);
class myClass
{
//
//
};
1、实例控制: 单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
缺点
1、开销: 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
2、可能的开发混淆:使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
3、对象生存期:不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
class A
{
// 函数后面加 const表示函数不可以修改class的成员。换而言之,这种函数不能改变this实例的任何数据
void function()const; //常成员函数, 它不改变对象的成员变量. 也不能调用类中任何非const成员函数。
}
对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。
const常量与define宏定义的区别
1) 编译器处理方式不同
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
2)类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
3)存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
ostream &operator(ostream &os,myClass a);
complex
&operator + (const complex& x, const complex& y);
complex
&operator + (const complex& x, double y);
complex
&operator + (double x, const complex& y);