一. 函数设计
1. 函数名字:动宾结构
2. 高内聚,低耦合,隐藏信息
3. 函数内部不能存在神秘数字
4. 尽量不用全局变量
5. 函数功能最好单一
6. if判断中最好将判断值放在变量前面
2.程序的结构化设计
自顶向下,逐步细化,模块化设计,结构化编码
若没有正在做什么和应如何去做的清晰思路,无论选何种语言编程,都无济于事
3. 程序设计的两分: 分析 分解
4.函数的特性
- 内聚性
功能内聚性 功能单一 移植性好
顺序内聚性 只有几个顺序操作组合才能完成一功能
通讯内聚性 函数中的几个操作只是使用共同的数据,没有其他的联系
临时内聚性 函数中的几个操作只是因为同时执行才被放入同一个函数中,没有其他的联系
- 耦合性
- 封装性 尽量不要修改传进来的参数数据 尽量不要使用全局变量
下午:
第1章 由C到C++.pdf
518.1 KB
518.1 KB
第一章 从C到C++
1.2.1 c++初始化
int i(10);
//等效C int i = 10;
1.2.2 作用域限定运算
::用于解决变量的名字冲突问题,主要用于访问一个在当前作用域内被当前局部变量隐藏的外部全局变量
1.2.3 c++ 中的头文件
iostream.h ==> iostreamstring.h ==> stringstdio.h ==> cstdiostdlib.h ==> cstdlib
1.2.4 名空间- "命名空间"的诞生
- 声明一个命名空间
namespace NS1
{
void fun1();
void fun2();
}
namespace NS2
{
void fun1();
void fun2();
}
- 使用:NS::fun1(); NS2::fun1();
使用using namespce::func1()
使用using namespace NS; - 标准命名空间std (standard) using namespace std
1.2.5 输入输出
- printf/ scanf 类型不安全
- 使用cin / cout
1.3.1 引用就是变量的别名 不分配内存空间
- int &r = x; // r 绑定x
- 引用必须初始化
int ival = 10;
int &ival; //错误 必须初始化 - 引用必须绑定一个对象
int &ival3 = 10; //错误 - 初始化不能想变量的初始化 int &ival(i);//错误
eg:
#include<iostream>using namespace std;void main(){int i(10);int * p = &i;int & ri = * p;cout << i <<" "<< *p <<" "<< ri << endl;}
1.3.2 const的用途
- int const *p / const int *p
int const *p 是p存放的地址不能改变; const int *p 是p指向的内存单元数据不能改变 - const 引用说明不能改变引用变量的值
- 形参使用const时 说明此变量不能再函数内部改变 形参可以是 const int *p /const int ℞
- const用于函数的返回类型 说明函数返回一个常指针 或者常引用
- const 用于说明类的函数成员时,表明在该函数内不能改变该类的成员数据
void classname::func() const
1.4 内存管理 - 动态申请内存
- 栈是在编译时候分配,堆实在运行的时候分配
- 堆用来动态分配内存
- 申请内存
C: malloc free
C++: new delete
delete 一定要释放动态申请的内存 不能释放静态分配的内存
int *pArray = new int[10]; delete[] pArray;pArray = NULL; 正确
int i = 10; int *p = &i; delete p; 错误; - 野指针:只想一块我们不能把控的内存单元
1.5 有关函数的扩展
- 带默认参数值的函数
bool screenInt(int height = 600,int width = 800,COLORREF background = RGB(255,255,255,)); //函数声明处
如果有一个参数有缺省值,则其后面的所有参数都要有缺省值 - 函数重载
可以想一下四则运算问题;
参数类型(包括const) 参数个数不同 - inline(内联)函数
解决短小函数频发调用,在编译的时候替换掉用地方,类似于宏-- 内联函数中不可含有循环;– 内联函数中不可含有switch语句;– 内联函数中不可含有静态变量;– 内联函数不可为递归函数;– 内联函数中不可含有异常处理。
第二章 类和对象
2.1.1 抽象和封装
- public 类外可以访问 private类内可以访问;protected专为继承而生
- 函数类内声明时实现,为隐式内联,也可以在类外inline
- class 与 struct 的区别 默认成员访问权限不同
- 类的作用域
类定义部分{}
类外成员函数形参部分
类外成员函数函数体部分 - this的使用
2.2 构造函数
- 初始化
- 和类同名
- 不能手动调用
- 不能有返回
2013.6.25 上午
2.3 拷贝构造函数
- 用自身的一个类已经存在的一个对象去初始化一个该类新的对象,该类的构造函数的形参为该类对象的引用
- 建议使用const
2.4 析构函数
- 类名::~类名(){}
- 没有参数
- 负责清理资源
- delete 为了 释放内存,指针赋除去野指针
2.6 友元
friend 关键字 如果在一个类里声明一个类或者函数或者类成员函数,则该的私有成员可以被他们访问
const对象 | 非const对象 | |
const成员 | 可以访问 | 可以访问 |
非const成员 | 不可以访问 | 可以访问 |
const对象只能访问const函数,no-const对象调用 no-const函数,若没有no-const函数调用const函数
下午
第四章 继承
4.1 继承基础知识
- class 派生类名 : 继承方式 基类名{
新增成员
} - 继承方式 private (化公为私) public (原封不动) protected(折中)
- 私有方式只能类内部访问 保护方式除了内部可以访问子类也可以访问
4.2 派生类构造函数
- 先构造基类 可以显式指出基类构造函数
child():father(m,n)
4.4 类型的兼容规则
基类指针可以指向派生类的对象 但是只能访问基类拥有的成员 及声明的类型
4.5 继承作用域
子类的成元会覆盖父类的同名成员(包括函数和变量)
覆盖的时候会覆盖所有同名的成员 包括重载的 但是可以使用using 关键字保留基类的重载函数 也可以使用转角函数即直接通过父类名调用函数
基类名::函数名(变量名)
2013.6.27
const成员函数不要返回非const的指针(HANDLE)
不要返回局部变量的地址 函数结束时 局部变量销毁