• <C++>类和对象——引入


    1. 面相对象和面向过程的基本概念

    C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

    C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

    我们以去酒店吃饭为例:

    面向过程:点菜、洗菜、切菜、炒菜、上菜、吃菜……

    面向对象:服务员、厨师、顾客……

    2. 类的引入

    #include<iostream>
    using namespace std;
    //C++兼容C struct的用法
    //C++同时对struct进行了升级,把struct升级成了类
    //1、结构体名称可以做类型
    //2、里面可以定义函数
    struct Student
    {
    	void Init(const char* name, const char* gender, int age)
    	{
    		strcpy(_name, name);
    		strcpy(_gender, gender);
    		_age = age;
    	}
    
    	void printf()
    	{
    		cout << _name << " " << _gender << " " << _age << endl;
    	}
        
        //类是个整体,可以把成员变量放在类的任意地方,这里放在了最后面
    	//这里不是必须加_
    	//习惯加这个,用于标识成员变量
    	char _name[20];
    	char _gender[5];
    	int _age;
    };
    int main()
    {
    	//结构体名称可以做类型,不需要一定写成struct Student s1
    	Student s1;
    	s1.Init("zhangsan", "nan", 18);
    	s1.printf();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    C++还是更喜欢用class定义类

    3. 类的定义

    class className
    {
    	// 类体:由成员函数和成员变量组成
    }; // 一定要注意后面的分号  
    
    • 1
    • 2
    • 3
    • 4

    class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。

    类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。

    但是,以上的代码只将声明struct Student改为class Student会报错:

    image-20220616171114340

    在里面加上访问限定符public:,才能编译成功。

    class Student
    {
    //加上public:
    public:
    	void Init(const char* name, const char* gender, int age)
    	{
    		strcpy(_name, name);
    		strcpy(_gender, gender);
    		_age = age;
    	}
    
    	void printf()
    	{
    		cout << _name << " " << _gender << " " << _age << endl;
    	}
        
        char _name[20];
    	char _gender[5];
    	int _age;
    };
    
    int main()
    {
    	Student s1;
    	s1.Init("zhangsan", "nan", 18);
    	s1.printf();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    接下来我们讲讲访问限定符

    4. 类的访问限定符

    【访问限定符说明】

    1. public修饰的成员在类外可以直接被访问
    2. protected和private修饰的成员在类外不能直接被访问(类里访问都不受限制)
    3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
    4. class不加访问限定符,默认是private;struct不加访问限定符,默认是public(因为struct要兼容C)

    ⚠️注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

    【面试题】

    问题:C++中struct和class的区别是什么?

    解答:C++需要兼容C语言,所以C++中struct可以当成结构体去使用。另外C++中struct还可以用来定义类,和class是定义类是一样的,区别是struct的成员默认访问方式是public,class是的成员默认访问方式是private。

    目前在不断更新<C++语言>的知识总结,已经更新完了<C语言><数据结构初阶>,未来我会系统地更新<Linux系统编程><Linux网络编程><数据结构进阶><MySQL数据库>等内容。想要系统学习编程的小伙伴可以关注我!

  • 相关阅读:
    unity面试题(性能优化篇)
    深度学习设计PROTAC的linker(3Dlinker)
    阿里云服务器公网带宽收费价格表_1M到100M报价
    第十三届蓝桥杯Java、C++、Python组国赛真题——最大公约数(三语言AC)
    面试题——网址 (url) 的组成、url模块、querystring模块、mime模块、各种路径、静态资源托管、网页的加载流程
    Javascript数据类型和类型转换
    如何获取UnrealEngine虚幻引擎的WebUI插件
    蓝桥杯第一天
    计算机网络 第3章 作业1
    基于微信小程序的医院预约挂号系统,附源码、数据库
  • 原文地址:https://blog.csdn.net/qq_47882731/article/details/125538000