c++面向对象程序设计
2021.10.25
1.目标:
-
培养正规的、大气的编程习惯 -
以良好的方式编写C++ classes
- ①class without pointer members,不含指针的,比如:复数;
- ②calss with pointer members,含指针的,比如:字符串。
-
学习classes之间的关系 ? ——继承 ? ——封装 ? ——多态
2.基于对象和面向对象
? Objected Based(基于对象):面对的是单一class的设计;
? Objected Oriented(面向对象):面对的是多重classes的设计,classes和classes之间的关系。
3.C++代码基本形式
? 引用自己写的头文件就用“”,引用标准库里的头文件就用<>。
#include<iostream.h> #include<stdio.h>
等效于 等效于
#include<iostream> #include<cstdio>
4.头文件中的防卫式声明
#ifndef _COMPLEX_
#define _COMPLEX_
…
#endif
头文件引用顺序可以随意,重复引用时,第二次不进入主体。
5.头文件的布局
#ifndef _COMPLEX_
#define _COMPLEX_
?//前置声明
#include<cmath>
class ostream;
class complex;
complex&
_doalp(complex* this, const complex& r);
①//类-声明
class complex
{
};
②//类-定义
complex::function…
#endif
6.关于类
注意:
- 数据放在private里;
- 参数尽可能以reference传递;
- 返回值也尽量用reference传递;
- 类的body里的函数要加const的一定要加;
- 构造函数中的:那一行尽量用。
6.1 函数若在class body里完成,自动成为inline候选人。
6.2 构造函数
-
名称跟类名称相同 -
默认实参 -
没有返回类型,因为是来创建对象的,不带指针的类多半不写析构函数 -
初始化 complex(double r = 0, double i = 0)
: re(r), im(i)
{}
效果与下面代码等同,但效率更高,下面的代码相当于放弃初始化 complex(double r = 0; double i = 0)
{re = r; im = i;}
6.3 ctor(构造函数)可以有很多个——重载
- c++允许重载,同名的函数可以同时存在,对编译器不同名(输入不同);
- 函数重载常常发生在构造函数上;
- 目前的构造函数已经有默认值了,但仍可以在不冲突的前提下重载其他构造函数。
6.4 常量成员函数
double real() const {return re;}
double imag() const {return im;}
类里的成员函数,注意const的位置。
若使用者加了const,但ctors没加const,会报错。使用者就会:???
6.5 引用
底部相当于指针,参数尽可能引用传递。pass by reference(to const)
6.6 friend可以自由取得friend的private成员
6.7 相同class的各个objects互为friends
ps.选择的课程是侯捷老师的面向对象程序设计,是对课程内容的简单整理。欢迎一起打卡学习、讨论交流。本人是一枚新手村程序媛~
|