【C++核心】一文理解C++面向对象(超级详细!)

慈云数据 2024-05-11 技术支持 71 0

文章目录

    • 一. 类和对象
      • 1.1 封装
        • 1.1.1 封装的意义
        • 1.1.2 struct和class区别
        • 1.1.3 成员属性设置为私有
        • 1.2 对象的初始化和清理
          • 1.2.1 构造函数和析构函数
          • 1.2.2 构造函数的分类及调用
          • 1.2.3 拷贝构造函数调用时机
          • 1.2.4 构造函数调用规则
          • 1.2.5 深拷贝与浅拷贝
          • 1.2.6 初始化列表
          • 1.2.7 类对象作为类成员
          • 1.2.8 静态成员
          • 1.3 C++对象模型和this指针
            • 1.3.1 成员变量和成员函数分开存储
            • 1.3.2 this指针概念
            • 1.3.3 空指针访问成员函数
            • 1.3.4 const修饰成员函数
            • 1.4 友元
              • 1.4.1 全局函数做友元
              • 1.4.2 类做友元
              • 1.4.3 成员函数做友元
              • 1.5 运算符重载
                • 1.5.1 加号运算符重载
                • 1.5.2 左移运算符重载
                • 1.5.3 递增运算符重载
                • 1.5.4 赋值运算符重载
                • 1.5.5 关系运算符重载
                • 1.5.6 函数调用运算符重载
                • 1.6 继承
                  • 1.6.1 继承的基本语法
                  • 1.6.2 继承方式
                  • 1.6.3 继承中的对象模型
                  • 1.6.4 继承中构造和析构顺序
                  • 1.6.5 继承同名成员处理方式
                  • 1.6.6 继承同名静态成员处理方式
                  • 1.6.7 多继承语法
                  • 1.6.8 菱形继承
                  • 1.7 多态
                    • 1.7.1 多态的基本概念
                    • 1.7.2 多态案例一-计算器类
                    • 1.7.3 纯虚函数和抽象
                    • 1.7.4 多态案例二-制作饮品
                    • 1.7.5 虚析构和纯虚析构
                    • 1.7.6 多态案例三-电脑组装

                      一. 类和对象

                      C++面向对象的三大特性为:封装、继承、多态

                      【C++核心】一文理解C++面向对象(超级详细!)
                      (图片来源网络,侵删)

                      C++认为万事万物都皆为对象,对象上有其属性和行为

                      例如:

                      【C++核心】一文理解C++面向对象(超级详细!)
                      (图片来源网络,侵删)

                      ​ 人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌…

                      ​ 车也可以作为对象,属性有轮胎、方向盘、车灯…,行为有载人、放音乐、放空调…

                      ​ 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类

                      1.1 封装

                      1.1.1 封装的意义

                      封装是C++面向对象三大特性之一,封装的意义:

                      • 将属性和行为作为一个整体,表现生活中的事物
                      • 将属性和行为加以权限控制

                        封装意义一:

                        ​ 在设计类的时候,属性和行为写在一起,表现事物

                        语法: class 类名{ 访问权限: 属性 / 行为 };

                        示例1: 设计一个圆类,求圆的周长

                        示例代码:

                        //圆周率
                        const double PI = 3.14;
                        //1、封装的意义
                        //将属性和行为作为一个整体,用来表现生活中的事物
                        //封装一个圆类,求圆的周长
                        //class代表设计一个类,后面跟着的是类名
                        class Circle
                        {
                        public:  //访问权限  公共的权限
                        	//属性
                        	int m_r;//半径
                        	//行为
                        	//获取到圆的周长
                        	double calculateZC()
                        	{
                        		//2 * pi  * r
                        		//获取圆的周长
                        		return  2 * PI * m_r;
                        	}
                        };
                        int main() {
                        	//通过圆类,创建圆的对象
                        	// c1就是一个具体的圆
                        	Circle c1;
                        	c1.m_r = 10; //给圆对象的半径 进行赋值操作
                        	//2 * pi * 10 = = 62.8
                        	cout 
                        public:
                        	void setName(string name) {
                        		m_name = name;
                        	}
                        	void setID(int id) {
                        		m_id = id;
                        	}
                        	void showStudent() {
                        		cout 
                        	Student stu;
                        	stu.setName("德玛西亚");
                        	stu.setID(250);
                        	stu.showStudent();
                        	return 0;
                        }
                        
                        	//姓名  公共权限
                        public:
                        	string m_Name;
                        	//汽车  保护权限
                        protected:
                        	string m_Car;
                        	//银行卡密码  私有权限
                        private:
                        	int m_Password;
                        public:
                        	void func()
                        	{
                        		m_Name = "张三";
                        		m_Car = "拖拉机";
                        		m_Password = 123456;
                        	}
                        };
                        int main() {
                        	Person p;
                        	p.m_Name = "李四";
                        	//p.m_Car = "奔驰";  //保护权限类外访问不到
                        	//p.m_Password = 123; //私有权限类外访问不到
                        	return 0;
                        }
                        
                        	int  m_A; //默认是私有权限
                        };
                        struct C2
                        {
                        	int m_A;  //默认是公共权限
                        };
                        int main() {
                        	C1 c1;
                        	c1.m_A = 10; //错误,访问权限是私有
                        	C2 c2;
                        	c2.m_A = 10; //正确,访问权限是公共
                        	system("pause");
                        	return 0;
                        }
                        
                        public:
                        	//姓名设置可读可写
                        	void setName(string name) {
                        		m_Name = name;
                        	}
                        	string getName()
                        	{
                        		return m_Name;
                        	}
                        	//获取年龄 
                        	int getAge() {
                        		return m_Age;
                        	}
                        	//设置年龄
                        	void setAge(int age) {
                        		if (age 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon