面向对象程序设计
目录
结构化程序设计
- 复杂大问题 -> 层层分解/模块化 -> 若干子问题
- 自顶向下,逐步求精
- 数据结构和算法无关(程序 = 数据结构 + 算法),而是变量和函数的各种调用
- 问题:理解难、修改难、查错难、重用难
面向对象程序设计
-
类+类+类...
-
设计程序的过程 -> 设计类的过程
-
抽象、封装、继承、多态
-
类的定义
面向对象程序设计发展历程
java:跨平台时需要修改的代码量很少
C++
C++标准的发展
常用C++编译器
从客观事物抽象出类
class CRectangle {
public:
int w, h;
void init(int w_, int h_){
w = w_;
h = h_;
}
int area() {
return w * h;
}
int perimeter() {
return 2 * (w + h);
}
}; //必须有分号
int main()
{
int w, h;
CRectangle r; //r是一个对象
cin >> w >> h;
r.init(w, h);
cout << r.area() << endl << r.perimeter();
return 0;
}
类 -> 类的实例化 -> 对象
对象的内存分配
对象间的运算
访问类的成员变量和成员函数
类成员函数的另一种写法
class CRectangle {
public:
int w, h;
int area();//声明但不定义成员函数
int perimeter();
void init(int w_, int h_);
}; //必须有分号
int CRectangle::area() {
return w * h;
}
int CRectangle::perimeter() {
return 2 * (w + h);
}
void CRectangle::init(int w_ ,int h_) {
w = w_; h = h_;
}
类成员的可访问范围
通过关键字定义,关键字出现次数和先后顺序没有限制
- private:私有成员,可以在成员函数内部被访问
- public:共有成员,可以在任何地方被访问
- protected:保护成员,继承中会讲到
类成员的访问权限
对象成员的访问权限
举例
#include<iostream>
using namespace std;
class CEmployee {
private:
char szName[30];//名字
public:
/*以下为成员函数内部,可访问私有变量*/
int salary;//工资
void setName(char * name);
void getName(char * name);
void aveSalary(CEmployee e1, CEmployee e2);
}; //必须有分号
void CEmployee::setName(char * name) {
strcpy(szName, name); //ok
}
void CEmployee::getName(char * name) {
strcpy(name, szName);//ok
}
void CEmployee::aveSalary(CEmployee e1, CEmployee e2) {
salary = (e1.salary + e2.salary) / 2;
}
int main() {
CEmployee e;
//strcpy(e.szName,"Tom"); //编译错误,不能访问私有成员
char * s = (char*)("Tom");
e.setName(s);//
e.salary = 5000;//ok
}
关于strcpt报错 C4996:'strcpy':https://blog.csdn.net/qq_33757398/article/details/81204372/
- 设置私有成员的目的:强调对成员变量的访问一定要通过成员函数进行。一方面保证安全;另一方面避免程序出错,益于程序的修改。
- 设置私有成员的机制:隐藏