面向结构程序设计 VS 面向对象程序设计
衡量语言的标准:
- 扩展性:添加新的功能,不修改之前的代码;
- 维护性:当出现问题,能够准确定位代码;
- 复用性:功能代码复用;
优缺点:
-
面向对象的优点:复用性好、扩展性好、维护性好。
面向结构的缺点:复用性差、扩展性差、维护性差。
应用场景: -
面向对象:解决复杂宏观的系统任务
面向结构:具体任务
例题: 小明用钥匙开门,然后开灯。
人---小明
钥匙---大门钥匙
门---大门
灯---客厅的灯
面向过程的方法是:分解成2个过程,开门、开灯。
面向对象的方法是:封装成4个对象,人、钥匙、门、灯。
-
面向对象的三大特点:
封装
继承
多态
命名空间
命名空间:(本质的实现:给每个变量和函数添加static)
命名冲突:全局变量、函数。
命名冲突产生的场景:多人协同开发!!!
C语言是如何解决多个文件导致的命名冲突?
答:static关键字
static关键字的作用:
1.修饰局部变量:延长局部变量的生命周期(程序执行结束后再释放);
例
#include <iostream>
#include <stdio.h>
using namespace std;//命名空间
void func()
{
static int num = 5;//static:执行一次
num++;
printf("num = %d\n",num);
}
int main()
{
func();
func();
func();
return 0;
}
输出:6、7、8。
std::标准库命名空间;防止与C语言的命名产生冲突;
2.修饰全局变量:被修饰全局变量,只能在本文件使用,不能在其他文件中使用;
3.修饰函数:被修饰的函数,只能在本文件访问,不能在其他文件访问;
C++是如何解决命名冲突?
命名空间的使用: 方法1:名字::成员。 方法2: using namespace 名字。
例:
#include <stdio.h>
namespace B
{
int count = 6;
}
static void ptint()
{
printf("print:count = %d\n",B::count);
printf(:print function!\n");
}
区别:单一VS全部
注意使用:源文件不能访问其他源文件的命名空间;如果命名1空间重名,相同成员名报错,不同成员名合并;
其他:嵌套定义