• (面试)谈谈我对C++面向对象特性的理解


    💯 博客内容:C++读取一行内个数不定的整数的方式

    😀 作  者:陈大大陈

    🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

    💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

     

    目录

    对象是什么?

    C语言和C++区别

    CVSC++

    什么是object-oriented


    对象是什么?

    什么是对象,对象就是一个东西,那什么是东西呢?

    对象可以是可见的,也能是不可见的,他可以是一句话,也可以是一个杯子。

    程序设计里,变量就是对象。变量有类型,决定了变量里面存什么,对象一样有类型。

    不同的对象有不同的特性,里面有一些数据时被保护起来的,外面是一些操作。

    我们可以通过这些操作或者说是服务来访问数据,却不能直接访问受保护的数据。

    两者的关系如图所示。

    面向过程和面向对象的区别在于 如何去描述,描述什么。

    C语言和C++区别

    比如有一个人去菜市场买菜,如果用C语言来描述,就是按照时间顺序来描述事情发生的过程,买家张三买了一捆白菜,然后店主李四帮他称菜等等。

    如果用C++来描述的话,就是描述事件中的对象,店主李四的吆喝传到张三的耳朵里,张三听到声音,他可能去买菜,也可能不去,这取决于白菜的价钱,说到白菜,又有了白菜的日期,产地,大小等等信息,C++就是描述对象以及对象间的关系。

    从程序设计的角度来看的话,如果要设计一个打印三个整形的程序。

    C语言来写的话是这样:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. typedef struct print3d
    4. {
    5. int x;
    6. int y;
    7. int z;
    8. }Print3d;
    9. void print3d_print(const Print3d* pd)
    10. {
    11. printf("%d %d %d\n", pd->x, pd->y, pd->z);
    12. }
    13. Print3d a;
    14. int main()
    15. {
    16. a.x = 1, a.y = 2, a.z = 3;
    17. print3d_print(&a);
    18. return 0;
    19. }

    C++来写的话则是这样:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. using namespace std;
    4. class print3d
    5. {
    6. public:
    7. print3d(int a=1, int b=2, int c=3)
    8. :_a(a)
    9. ,_b(b)
    10. ,_c(c)
    11. {
    12. }
    13. void print()
    14. {
    15. cout << _a<<' ' << _b <<' ' << _c << endl;
    16. }
    17. private:
    18. int _a;
    19. int _b;
    20. int _c;
    21. };
    22. int main()
    23. {
    24. print3d().print();
    25. }

    在C++的代码里,print3d()是一个匿名对象,我们要它来执行print这个操作。

    CVSC++

    我们看到,C语言的struct里面,只有数据

    而C++的class里面,既有数据,也有操作。

    C语言的代码,操作在结构体外面,所以要执行打印操作,需要传结构体的指针进去。

    C++的代码,操作在结构体内部,所以当你要它做什么操作,对象自己就会操作,而不需要像C语言一样将对象的地址传到函数里面去。

    什么是object-oriented

    总的来说,面向对象是一种方法,这种方法是用来组织设计和实现的。

    组织设计就是找到解决问题的思路。

    实现就是把代码写出来。

    面向对象关键的核心在于,对象是组织和实现主要关注的东西,而不是过程。

  • 相关阅读:
    华为OD 完全二叉树非叶子部分后序遍历(200分)【java】A卷+B卷
    LeetCode高频题:dfs排列组合问题,剪枝策略,参观展厅总时间120分钟,请你给出所有可能的参观方案的个数
    zookeeper的安装部署
    河北邯郸:拓展基层就业空间 助力高校毕业生就业
    机器学习实训(1)——概览(补充)
    Data Plane, Control Plane, Management Plane到底都是什么?
    图论学习 c++Ford-Fulkerson 方法
    C++ 捕获程序异常奔溃minidump
    lightdb oracle模式支持sys_refcursor类型
    消息队列 RocketMQ 消息重复消费问题(原因及解决)
  • 原文地址:https://blog.csdn.net/weixin_73534885/article/details/133650224