当前位置: 首页 > news >正文

C++(类和对象—封装)

C++面向对象的三大特性

封装

继承

多态

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

什么是封装?

封装是C++面向对象三大特性之一

封装的意义:
        将属性和行为作为一个整体,表现生活中的事物

        将属性和行为加以权限控制
封装意义一:
        在设计类的时候,属性和行为写在一起,表现事物

语法:

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

#include<iostream>
using namespace std;//圆周率
const double PI = 3.14;//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*R
//class代表设计一个类,类后面紧跟着的就是类名
class circle {//访问权限//公共权限
public://属性//半径int r;//行为//获取圆的周长double ZC() {return 2 * PI * r;}
};int main() {//通过圆类创建具体的圆(对象)circle c1;//给圆对象的属性进行赋值c1.r = 10;cout << "圆的周长是:" << c1.ZC() << endl;
}

类中的属性和行为我们统一称为成员

属性 = 成员属性 = 成员变量
行为 = 成员函数 = 成员方法

三种权限对比

封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制

访问权限有三种:
        1. public 公共权限

        成员  类内可以访问  类外可以访问

        2. protected 保护权限 

        成员  类内可以访问  类外不可以访问―儿子可以访问父亲中的保护内容

        3. private 私有权限 

        成员  类内可以访问  类外不可以访问儿子不可以访问父亲的私有内容

#include<iostream>
using namespace std;class person {
public:string name;
protected:string car;
private:int pwd;
public:void func() {name = "ty";car = "ducatti";pwd = 123456;}
};int main() {person p1;p1.func(); //public可以访问
}

struct和class的区别

在C++中struct和class唯—的区别就在于默认的访问权限不同

区别:
struct     默认权限为公共

class      默认权限为私有

成员属性设置为私有

优点1: 将所有成员属性设置为私有,可以自己控制读写权限

优点2: 对于写权限,我们可以检测数据的有效性

#define _CRT_SECURE_NO_WARNINGS //确保编译器不会显示与安全性相关的警告信息。
#include<iostream>
#include<string>
using namespace std;class person {
public:void setname(string name) {Name = name;}string getname() {return Name;}int getage() {return Age;}int setage(int age) {if (age < 0 || age >150) {cout << "年龄" << age << "输入有误!" << endl;return 0;}Age = age;}void setidol(string idol) {Idol = idol;}
private:string Name; //可读可写int Age = 24; //只读string Idol; //只写
};int main() {person p;//可读可写p.setname("tianyang");cout << "姓名:" << p.getname() << endl;//只读cout << "年龄:" << p.getage() << endl;//可读可写p.setage(151);cout << "年龄:" << p.getage() << endl;//只写p.setidol("ty");
}
姓名:tianyang
年龄:24
年龄151输入有误!
年龄:24

http://www.lryc.cn/news/347616.html

相关文章:

  • 如何训练一个大模型:LoRA篇
  • Spring Cloud学习笔记(Nacos):基础和项目启动
  • 音频提取特征
  • AJAX前端与后端交互技术知识点以及案例
  • [AutoSar]BSW_Diagnostic_003 ReadDataByIdentifier(0x22)介绍
  • 买卖股票的最佳时机 II(LeetCode 122)
  • Spring Boot:让微服务开发像搭积木一样简单!
  • WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化
  • ==与===的区别
  • 什么是ACID及基本实现的示例
  • 【启明智显技术分享】SSD202核心板Rootfs下如何烧录mac地址
  • springboot3 集成spring-authorization-server (一 基础篇)
  • AVL树!
  • 知识付费系统怎么安装教程,教师课堂教学该掌握哪些表达技巧?
  • 基于MetaGPT的LLM Agent学习实战(一)
  • 【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架
  • 【Linux基础】Vim保姆级一键配置教程(手把手教你把Vim打造成高效率C++开发环境)
  • Gartner发布准备应对勒索软件攻击指南:勒索软件攻击的三个阶段及其防御生命周期
  • IB 公式解析
  • 开发辅助工具的缩写
  • linux程序分析命令(一)
  • MYSQL数据库-SQL语句
  • MyBatis认识
  • 【WEEK11】 【DAY6】Employee Management System Part 7【English Version】
  • 【52】Camunda8-Zeebe核心引擎-Clustering与流程生命周期
  • 从零开始的软件测试学习之旅(八)jmeter线程组参数化及函数学习
  • 图文并茂:解析Spring Boot Controller返回图片的三种方式
  • 问题处理记录 | 表输出报错 Packet for query is too large (5,214,153 > 4,194,304).
  • 数据结构_栈和队列(Stack Queue)
  • 基于docker 的elasticsearch冷热分离及生命周期管理