面向对象第二讲

面向对象第二讲

1.C与C++

C语言是面向结构,C++是面向对象

C语言能快速地解决具体事物,但在后期的维护和扩展方面非常麻烦。
C++能够解决复杂业务逻辑,彼此之间相互独立,在后期维护扩展中可以直接添加修改。
面向结构能够快速解决具体任务,但从长期的角度来看,任务越复杂,面向结构的难度越大,在添加新的过程时,一般情况下,面向结构需要大范围地修改代码;在维护时,由于面向结构是将整个问题分割成若干的问题去解决的,所以不能准确定位代码,也因此不能随便服用之前写好的代码。
面向对象则能完美解决这些问题。虽然在前期会耗费更多的时间,但由于代码与代码之间相互独立,增加功能时所需要的仅仅是添入新的一段代码就可以解决;维护也不需要大动干戈;而正因为代码之间的相互独立,代码与代码可以不断复用,后期可以省下很多资源和时间。
面向对象特点:
面向对象
封装--提高代码的维护性
继承--提高代码的复用性
多态--提高代码的扩展性
应用对象:

面向对象:解决复杂宏观的系统任务
面向结构:解决具体任务

2.命名冲突

命名冲突产生的场景:多人协同开发
命名冲突原因:全局变量函数

①.static关键字

C语言如何解决多个文件导致的命名冲突?
答:static关键字

static关键字作用:

Ⅰ.修饰局部变量:延长局部变量的生命周期(程序执行结束之后再释放)

void fun()
{
    int num = 5;
    num++;
    printf("num = %d\n",num);
}
int main()
{
    func();
    func();
    func();
    return 0;
}

程序运行结果:

num = 6
num = 6
num = 6

第一次函数执行完之后,num被释放,第二次、第三次执行的时候num还是5。

void fun()
{
    static int num = 5;//在执行完之后num不释放,将它的生命周期延长至整个程序结束,这句话只执行一次
    num++;
    printf("num = %d\n",num);
}
int main()
{
    func();
    func();
    func();
    return 0;
}

程序运行结果

num = 6
num = 7
num = 8

Ⅱ.修饰全局变量:被修饰的全局变量,只能在本文件内访问,不能在其他文件访问

extern int count;//extern:外部声明(声名该变量在其他文件中定义)
static int count = 5;//只能在本文件内访问

即使使用extern,也不能访问到其他文件中的count。
Ⅲ.修饰函数:被修饰的函数,只能在本文件内访问,不能在其他文件访问(原理同上)

②.命名空间

C++如何解决命名冲突?
答:命名空间
在每个文件中加命名空间,将每个文件独立开。
本质:给每个变量和函数添加static

namespace A
{
    int count = 5;
}
int main()
{
    printf(" count = %d",A::count);//::表示限定作用域,通过它来访问命名空间中的内容
}
namespace B
{
    int count = 6;
}
int main()
{
    printf(" count = %d",B::count);//::表示限定作用域,通过它来访问命名空间中的内容
}

程序运行结果

count = 5
count = 6;

命名空间中也可以放函数等,即能隔离所有东西。同时,命名空间内的所有内容只能在本文件访问。
:源文件不能访问其他源文件的命名空间。命名空间名称相同成员名称不同,那么就会自动合并为一个命名空间;如果命名空间名称相同成员名称也相同,程序报错

using namespace A;//将命名空间A中内容全部导入

命名空间的使用

方式一方式二
名字::成员using namespace 名字
单一成员导入全部成员导入
占用资源小占用资源多

嵌套定义

namespace A
{
    int count = 5;
    namespace B
    {
        int count =6;
    }
}
int main()
{
    printf("count = %d",A::B::count);
    return 0;
}

程序运行结果

count = 6

std::标准库命名空间,防止与C语言的命名产生冲突

using namespace std;//每次使用C++时都需要在头文件写,或者在每一个cout、endl之前加std::代替

3.输入与输出

在vs2019中使用C++,使用scanf会报错
解决方法:
1.认为安全的版本是使用scanf_s
2.设置常规中的SDL检查设置
3.在最上面头文件加宏

#pragma warning(disable:4996)
scanf("%d", &num);
getchar();//当使用scanf时,在下面一行输入getchar();来解决vs2019上scanf输入的弊端
cout << num << endl;//将数据输入到cout中输出
cout << src << "\n";//endl与"\n"作用相同
cin >> num;
cin >> src;//作用和上面两行相同

注: cin遇到字符串时,到空格就会停止,即不能捕获带空格的字符串

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值