封装(个人学习笔记黑马学习)

1、格式

#include <iostream>
using namespace std;const double PI =3.14;//设计一个圆类,求圆的周长
class Circle {//访问权限//公共权限
public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;}
};int main() {//通过圆类创造具体的圆Circle c1;c1.m_r = 10;cout << "圆的周长:" << c1.calculateZC() << endl;system("pause");return 0;
}


2、案例:设计学生类

设计一个学生类,属性有姓备和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号

#include <iostream>
using namespace std;
#include <string>class Studentt {
public:string m_Name;int m_Id;void showStudent() {cout << "姓名:" << m_Name << " 学号:" << m_Id << endl;}//给姓名赋值void setName(string name) {m_Name = name;}//给学号赋值void setId(int id) {m_Id = id;}
};int main() {Studentt s1;//s1.m_Name = "张三";s1.setName("张三");s1.setId(1);s1.showStudent();Studentt s2;s2.m_Name = "李四";s2.m_Id = 2;s2.showStudent();system("pause");return 0;
}


3、权限访问

1. public公共权限

2. protected 保护权限

3. private私有权限

#include <iostream>
using namespace std;
#include <string>//1. public公共权限     成员 类内可以访问 类外也可以访问
//2. protected保护权限  成员 类内可以访问 类外不可以访问   儿子可以访问父亲中的保护内容
//3. private私有权限    成员 类内可以访问 类外不可以访问   儿子不可以访问父亲中保护的内容class Person {//公共权限
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 p1;p1.m_Name = "李四";//p1.m_Car = "奔驰";//保护权限内容 在类外访问不到//p1.m_Password = 23456;//私有权限内容,在类外访问不到system("pause");return 0;
}

4、class和struct区别

  • struct 默认权限为公共
  • class默认权限为私有
#include <iostream>
using namespace std;
#include <string>class C1 {int m_A;//默认权限是私有
};struct C2 {int m_A;//默认权限是公共
};int main() {C1 c1;//c1.m_A = 100;C2 c2;c2.m_A = 100;system("pause");return 0;
}

5、成员属性私有化

#include <iostream>
using namespace std;
#include <string>class Person {public://设置姓名void setName(string name) {m_Name = name;}//获取姓名string getName() {return m_Name;}int getAge() {m_Age = 10;return m_Age;}void setLover(string lover) {m_Lover = lover;}private:string m_Name;//可读可写int m_Age;//只读string m_Lover;//只写
};int main() {Person p;p.setName("张三");cout << "姓名:"<<p.getName()<< endl;cout << "年龄:" << p.getAge() << endl;p.setName("梨花");system("pause");return 0;
}


6、案例设计:立方体类

设计立方体类(Cube)
求出立方体的面积和体积
分别用全局函数和成员函数判断两个立方体是否相等

#include <iostream>
using namespace std;
#include <string>class Cube {public:void setL(int l) {m_L = l;}int getL() {return m_L;}void setW(int w) {m_W = w;}int getW() {return m_W;}void setH(int h) {m_H = h;}int getH() {return m_H;}int calculateS() {return 2 * m_L * m_W + 2 * m_W * m_H + 2 * m_L * m_H;}int calculateV() {return m_H * m_L * m_W;}//利用成员函数判断两个立方体是否相等bool isSameByClass(Cube& c) {if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH()) {return true;}return false;
}private:int m_L;int m_W;int m_H;
};//利用全局函数判断 两个立方体是否相等
bool isSame(Cube& c1, Cube& c2) {if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()) {return true;}return false;}int main() {Cube c1;c1.setL(10);c1.setW(10);c1.setH(10);cout << "c1的面积为:" << c1.calculateS() << endl;cout << "c1的体积为:" << c1.calculateV() << endl;Cube c2;c2.setL(10);c2.setW(10);c2.setH(10);cout << "c2的面积为:" << c2.calculateS() << endl;cout << "c2的体积为:" << c2.calculateV() << endl;bool ret=isSame(c1, c2);if (ret) {cout << "c1,c2相等" << endl;}else {cout << "c1,c2不相等" << endl;}int ret2= c1.isSameByClass(c2);if (ret2) {cout << "c1,c2相等" << endl;}else {cout << "c1,c2不相等" << endl;}int ret3 = c2.isSameByClass(c1);if (ret3) {cout << "c1,c2相等" << endl;}else {cout << "c1,c2不相等" << endl;}system("pause");return 0;
}


7、案例设计:点和圆的关系

设计一个圆形类(Circle),和一个点类 (Point) ,计算点和圆的关系

#include <iostream>
using namespace std;
#include <string>class Point {
public:void setX(int x) {m_X = x;}int getX() {return m_X;}void setY(int y) {m_Y = y;}int getY() {return m_Y;}private:int m_X;int m_Y;
};class Circle {public:void setR(int r) {m_R = r;}int getR() {return m_R;}void setCenter(Point center) {m_Center = center;}Point getCenter() {return m_Center;}private:int m_R;Point m_Center;//圆心
};void isInCircle(Circle& c, Point& p) {//计算两点之间距离 平方int distance =(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());//计算半径的平方int rDistance = c.getR() * c.getR();//判断关系if (distance == rDistance) {cout << "点在圆上" << endl;}else if (distance > rDistance) {cout << "点在圆外" << endl;}else {cout << "点在圆内" << endl;}
}int main(){//创建圆Circle c;c.setR(10);Point center;center.setX(10);center.setY(10);c.setCenter(center);//创建点Point p;p.setX(10);p.setY(11);//判断关系isInCircle(c, p);system("pause");return 0;
}


point.h

#pragma once//防止头文件重复包含
#include <iostream>
using namespace std;class Point {
public:void setX(int x);int getX();void setY(int y);int getY();
private:int m_X;int m_Y;
};

point.cpp

#include "point.h"void Point:: setX(int x) {m_X = x;
}
int Point:: getX() {return m_X;
}void Point:: setY(int y) {m_Y = y;
}
int Point:: getY() {return m_Y;
}

circle.h

#pragma once
#include <iostream>
using namespace std;
#include "point.h"class Circle {public:void setR(int r);int getR();void setCenter(Point center);Point getCenter();private:int m_R;Point m_Center;//圆心
};

circle.cpp

#include "circle.h"void Circle:: setR(int r) {m_R = r;}int Circle:: getR() {return m_R;}void Circle:: setCenter(Point center) {m_Center = center;}Point Circle:: getCenter() {return m_Center;}

面向对象.cpp

#include <iostream>
using namespace std;
#include <string>
#include "point.h"
#include "circle.h"//class Point {
//public:
//	void setX(int x) {
//		m_X = x;
//	}
//	int getX() {
//		return m_X;
//	}
//
//	void setY(int y) {
//		m_Y = y;
//	}
//	int getY() {
//		return m_Y;
//	}
//
//private:
//	int m_X;
//	int m_Y;
//};//class Circle {
//
//public:
//	void setR(int r) {
//		m_R = r;
//	}
//	int getR() {
//		return m_R;
//	}
//
//	void setCenter(Point center) {
//		m_Center = center;
//	}
//	Point getCenter() {
//		return m_Center;
//	}
//
//private:
//	int m_R;
//
//	Point m_Center;//圆心
//};void isInCircle(Circle& c, Point& p) {//计算两点之间距离 平方int distance =(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());//计算半径的平方int rDistance = c.getR() * c.getR();//判断关系if (distance == rDistance) {cout << "点在圆上" << endl;}else if (distance > rDistance) {cout << "点在圆外" << endl;}else {cout << "点在圆内" << endl;}
}int main(){//创建圆Circle c;c.setR(10);Point center;center.setX(10);center.setY(0);c.setCenter(center);//创建点Point p;p.setX(10);p.setY(10);//判断关系isInCircle(c, p);system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/117132.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 学习笔记(1)——系统基本配置与开关机命令

目录 0、起步 0-1&#xff09;命令使用指引 0-2&#xff09;查看历史的命令记录 0-3&#xff09;清空窗口内容 0-4&#xff09;获取本机的内网 IP 地址 0-5&#xff09;获取本机的公网ip地址 0-6&#xff09;在window的命令行窗口中远程连接linux 0-7&#xff09;修改系…

VScode 国内下载源 以及 nvm版本控制器下载与使用

VScode 国内下载源 进入官网 https://code.visualstudio.com/ 点击下载 复制下载链接到新的浏览器标签 将地址中的/stable前的az764295.vo.msecnd.net换成vscode.cdn.azure.cn&#xff0c;再回车就会直接在下载列表啦。 参考大神博客 2.使用nvm 对 node 和npm进行版本控制…

ARM编程模型-内存空间和数据

ARM属于RISC体系&#xff0c;许多指令单周期指令&#xff0c;是32位读取/存储架构&#xff0c;对内存访问是32位&#xff0c;Load and store的架构&#xff0c;只有寄存器对内存&#xff0c;不能内存对内存存储&#xff0c;CPU通过寄存器对内存进行读写操作。 ARM的寻址空间是线…

go Session的实现(一)

〇、前言 众所周知&#xff0c;http协议是无状态的&#xff0c;这对于服务器确认是哪一个客户端在发请求是不可能的&#xff0c;因此为了能确认到&#xff0c;通常方法是让客户端发送请求时带上身份信息。容易想到的方法就是客户端在提交信息时&#xff0c;带上自己的账户和密…

17.看楼房

目录 Description Input Output Notes 思路 注意事项 C完整代码&#xff08;含详细注释&#xff09; Description 小张在暑假时间进行了暑期社会调查。调查的内容是楼房的颜色如何影响人们的心情。于是他找到了一个楼房从左到右排成一排的小区&#xff0c;这个小区一共有…

51单片机项目(7)——基于51单片机的温湿度测量仿真

本次做的设计&#xff0c;是利用DHT11传感器&#xff0c;测量环境的温度以及湿度&#xff0c;同时具备温度报警的功能&#xff1a;利用两个按键&#xff0c;设置温度阈值的加和减&#xff0c;当所测温度大于温度阈值的时候&#xff0c;蜂鸣器就会响起&#xff0c;进行报警提示。…

安卓 tcp 客户端

安卓 tcp 客户端 Server:8888 是Qt 写的Tcp 服务器 ip 是 192.168.2.103 port是8888 安卓手机运行 kotlin 语法的Tcp Client &#xff0c;连接&#xff0c;收发数据 效果如下图 Tcpclient package com.example.myapplicationimport android.os.Handler import android.os.Loo…

【leetcode 力扣刷题】数学题之计算次幂//次方:快速幂

利用乘法求解次幂问题—快速幂 50. Pow(x, n)372. 超级次方 50. Pow(x, n) 题目链接&#xff1a;50. Pow(x, n) 题目内容&#xff1a; 题目就是要求我们去实现计算x的n次方的功能函数&#xff0c;类似c的power()函数。但是我们不能使用power()函数直接得到答案&#xff0c;那…

ARM Cortex-M 的 SP

文章目录 1、栈2、栈操作3、Cortex-M中的栈4、MDK中的SP操作流程5、Micro-Lib的SP差别1. 使用 Micro-Lib2. 未使用 Micro-Lib 在嵌入式开发中&#xff0c;堆栈是一个很基础&#xff0c;同时也是非常重要的名词&#xff0c;堆栈可分为堆 (Heap) 和栈 (Stack) 。 栈(Stack): 一种…

EG1164大功率同步整流升压模块开源,最高效率97%

EG1164大功率同步整流Boost升压电源模块&#xff0c;最高效率97%&#xff0c;输入电压8~50V&#xff0c;输出电压8~60V可调&#xff0c;最大功率300瓦以上&#xff0c;开关频率219kHz。 白嫖了张嘉立创的彩色丝印券就随便画了个板试试&#xff0c;第一次打彩色丝印。 因为我测…

flutter plugins插件【一】【FlutterJsonBeanFactory】

1、FlutterJsonBeanFactory 在Setting->Tools->FlutterJsonBeanFactory里边自定义实体类的后缀&#xff0c;默认是entity 复制json到粘贴板&#xff0c;右键自己要存放实体的目录&#xff0c;可以看到JsonToDartBeanAction Class Name是实体名字&#xff0c;会默认加上…

基于硬件隔离增强risc-v调试安全1_问题描述

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

每日一题 2511. 最多可以摧毁的敌人城堡数目

难度&#xff1a;简单 翻译&#xff1a;寻找距离最远的 1 和 -1 的组合&#xff0c;要求它们之间只有0 class Solution:def captureForts(self, forts: List[int]) -> int:res, t 0, -1for i, fort in enumerate(forts):if fort -1 or fort 1:if t > 0 and fort ! f…

前端Vue自定义得分构成水平柱形图组件 可用于系统专业门类得分评估分析

引入Vue自定义得分构成水平柱形图组件&#xff1a;cc-horBarChart 随着技术的发展&#xff0c;传统的开发方式使得系统的复杂度越来越高&#xff0c;一个小小的改动或小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c…

扫盲:常用NoSQL数据库

前言 关系型数据库产品很多&#xff0c;如 MySQL、Oracle、Microsoft SQL Sever 等&#xff0c;但它们的基本模型都是关系型数据模型。 非关系型数据库又称为&#xff1a;NoSQL &#xff0c;没有统一的模型&#xff0c;而且是非关系型的。 常见的 NoSQL 数据库包括键值数据库、…

【前端】Vue2 脚手架模块化开发 -快速入门

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理Vue2 脚手架模块化开发 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&#x…

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发)

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型&#xff08;全网首发&#xff09; 一、学习资料 (LGBM)是一种基于梯度增强决策树(GBDT)算法。 本次研究三个内容&#xff0c;分别是回归预测&#xff0c;二分类预测和多分类预…

系列五、Java操作RocketMQ简单消息之同步消息

一、概述 同步消息的特征是消息发出后会有一个返回值&#xff0c;即RocketMQ服务器收到消息后的一个确认&#xff0c;这种方式非常安全&#xff0c;但是性能上却没有那么高&#xff0c;而且在集群模式下&#xff0c;也是要等到所有的从机都复制了消息以后才会返回&#xff0c;适…

Linux系统Ubuntu以非root用户身份操作Docker的方法

本文介绍在Linux操作系统Ubuntu版本中&#xff0c;通过配置&#xff0c;实现以非root用户身份&#xff0c;进行Docker各项操作的具体方法。 在文章Linux系统Ubuntu配置Docker详细流程&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/132612560&#xff0…

如何使用Puppeteer进行新闻网站数据抓取和聚合

导语 Puppeteer是一个基于Node.js的库&#xff0c;它提供了一个高级的API来控制Chrome或Chromium浏览器。通过Puppeteer&#xff0c;我们可以实现各种自动化任务&#xff0c;如网页截图、PDF生成、表单填写、网络监控等。本文将介绍如何使用Puppeteer进行新闻网站数据抓取和聚…