面向对象程序设计

结构化程序设计

  • 复杂大问题 -> 层层分解/模块化 -> 若干子问题
  • 自顶向下,逐步求精
  • 数据结构和算法无关(程序 = 数据结构 + 算法),而是变量和函数的各种调用
  • 问题:理解难、修改难、查错难、重用难

面向对象程序设计

  • 类+类+类...

  • 设计程序的过程 -> 设计类的过程

  • 抽象、封装、继承、多态

  • 类的定义

面向对象程序设计发展历程

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/

  • 设置私有成员的目的:强调对成员变量的访问一定要通过成员函数进行。一方面保证安全;另一方面避免程序出错,益于程序的修改。

  • 设置私有成员的机制:隐藏
posted @ 2020-10-19 10:55  rookieveteran  阅读(173)  评论(0编辑  收藏  举报