注意:在C++中struct类一样有权限设置,且可以写成员函数(行为)
示例
#include<iostream>
#include<string>
using namespace std;
class Student {
public://公共权限
string m_name;
int m_id;
//通过成员函数进行赋值操作
void setName(string name) {
m_name = name;
}
void setID(int id) {
m_id = id;
}
void showStudent() {
cout << "name:" << m_name << " ID:" << m_id << endl;
}
};
struct Teacher{
public:
string m_name;
int m_id;
void setName(string name) {
m_name = name;
}
void setID(int id){
m_id = id;
}
void showTeacher() {
cout << "name:" << m_name << " ID:" << m_id << endl;
}
};
int main() {
//实例化
Student stu;
stu.setName("Starry");
stu.setID(20);
stu.showStudent();
Teacher tea;
tea.setName("Dolly");
tea.setID(50);
tea.showTeacher();
system("pause");
return 0;
}
4.1.3 成员属性设置为私有
优点1 将所有成员属性设置为私有,可以自己控制读写权限
优点2 对于写权限,我们可以检测数据的有效性
示例:
class Person {
public:
//姓名设置可读可写
void setName(string name) {
m_Name = name;
}
string getName()
{
return m_Name;
}
//获取年龄
int getAge() {
return m_Age;
}
//设置年龄
void setAge(int age) {
if (age < 0 || age > 150) {
cout << "你个老妖精!" << endl;
return;
}
m_Age = 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;
//年龄设置
p.setAge(50);
cout << "年龄: " << p.getAge() << endl;
//情人设置
p.setLover("苍井");
//cout << "情人: " << p.m_Lover << endl; //只写属性,不可以读取
system("pause");
return 0;
}
练习案例1:设计立方体类
-
设计立方体类(Cube)
-
求出立方体的面积和体积
-
分别用全局函数和成员函数判断两个立方体是否相等。
示例
#include<iostream>
#include<string>
using namespace std;
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_L*m_H + 2 * m_W*m_H;
}
//获取体积
int CalculateV() {
return m_L * m_W*m_H;
}
//利用成员函数判断两个立方体是否相等
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()
{
//实例化1
Cube c1;
c1.setL(10);
c1.setW(10);
c1.setH(10);
cout << "c1的面积为:" << c1.CalculateS() << endl;
cout << "c1的体积为:" << c1.CalculateV() << endl;
//实例化2
Cube c2;
c2.setL(10);
c2.setW(10);
c2.setH(10);
cout << "c2的面积为:" << c1.CalculateS() << endl;
cout << "c2的体积为:" << c1.CalculateV() << endl;
//全局函数判断
bool ret = isSame(c1, c2);
if (ret) {
cout << "全局函数判断:c1与c2相等" << endl;
}
else {
cout << "全局函数判断:c1与c2不相等" << endl;
}
//成员函数判断
ret = c1.isSameByClass(c2);
if (ret) {
cout << "成员函数判断:c1与c2相等" << endl;
}
else {
cout << "成员函数判断:c1与c2不相等" << endl;
}
return 0;
}
练习案例2:点和圆的关系(类的嵌套)
设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。
1.点到圆的距离大于半径 点在圆外
2.点到圆的距离等于半径 点在圆上
3.点到圆的距离小于半径 点在圆内
示例
#include<iostream>
using namespace std;
//点类
class Point
{
public:
//设置x
void setX(int x) {
m_X = x;
}
//获取x
int getX() {
return m_X;
}
//设置y
void setY(int y) {
m_Y = 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);
}
===================================================================================
头文件 声明类
Point.h
#pragma once
#include<iostream>
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/0cca4243855e928e4942127485133b26.png)
![img](https://img-blog.csdnimg.cn/img_convert/ba8f4e528e30f8f730f9f3325a0a8230.png)
![img](https://img-blog.csdnimg.cn/img_convert/41e2c9249349addb101897536f4ba891.png)
![img](https://img-blog.csdnimg.cn/img_convert/20a9d365c0db3598719ebdc3f2107779.png)
![img](https://img-blog.csdnimg.cn/img_convert/728aff3b8cc7f5baad4d9c7d28f8b2a9.png)
![img](https://img-blog.csdnimg.cn/img_convert/b94ea3921164a35f43dd6679ae187649.png)
![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
![img](https://img-blog.csdnimg.cn/img_convert/64b0aa18979413b437cec51d84725a5a.png)
## 分享读者
> 作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
> 被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
![](https://img-blog.csdnimg.cn/img_convert/7a7e8cdbd5c1f2ab9d0a2ea18c43cf6a.webp?x-oss-process=image/format,png)
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/b66e5bcbc6c82a11e68c18272b3b39e7.png)
进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
[外链图片转存中...(img-njqSPwBr-1712699590333)]
## 分享读者
> 作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
> 被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
[外链图片转存中...(img-NPJlHtgS-1712699590333)]
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-2pW1HA81-1712699590333)]