您的位置:首页 > 财经 > 产业 > 济南网红_深圳营销型网站建设公司网络服务_优秀品牌策划方案_国际新闻消息

济南网红_深圳营销型网站建设公司网络服务_优秀品牌策划方案_国际新闻消息

2025/3/11 0:17:04 来源:https://blog.csdn.net/qq_52737907/article/details/146079659  浏览:    关键词:济南网红_深圳营销型网站建设公司网络服务_优秀品牌策划方案_国际新闻消息
济南网红_深圳营销型网站建设公司网络服务_优秀品牌策划方案_国际新闻消息

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

具有相同性质的对象,抽象为类

4.1 封装

封装的意义:将属性和行为作为一个整体,表现生活中的事物,并将属性和行为加以权限控制。

4.1.1 类的定义及实例化对象

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

类中的属性和行为统称为成员,属性也可以称为成员属性或成员变量,行为也可以称为成员函数或成员方法。

代码如下:

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

输出如下:

4.1.2 访问权限

访问权限分为三种:

  • 公共权限:类内外都可以访问成员
  • 保护权限:类内可以访问成员,类外不能访问
  • 私有权限:类内可以访问成员,类外不能访问

代码如下:

#include <iostream>
using namespace std;class Person
{//公共权限
public:string name;//保护权限
protected:string car;//私有权限
private:int passwd;
public:void func(){name="ddd";car="bench";passwd=4444;}
};
int main()
{//实例化一个对象Person p1;//给圆对象的属性进行赋值p1.name="dddd";//p1.car="paosij";//p1.passwd=1234;return 0;
}

错误示例:修改保护权限和私钥权限的属性。

成员属性设置为私有,可以自己控制读写权限,对于写权限,可以检测数据的有效性。

代码如下:

#include <iostream>
using namespace std;class Person
{
public://设置姓名void setName(string name){m_name=name;}//获取姓名string getName(){return m_name;}//获取年龄int getAge(){return m_age;}//设置偶像void setIdol(string idol){m_idol=idol;}private:string m_name;//姓名 可读可写int m_age=18;//年龄 只读string m_idol;//偶像 只写};
int main()
{//实例化一个对象Person p;//设置姓名p.setName("ddd");//获取姓名cout<<"姓名:"<<p.getName()<<endl;//设置年龄,不存在该函数//p.setAge("ddd");//报错 不存在该成员setAge//p.m_age=23;//报错 无法访问//获取年龄cout<<"年龄:"<<p.getAge()<<endl;//设置偶像p.setIdol("huge");//获取偶像,没有获取函数//cout<<"偶像:"<<p.getIdol()<<endl;//报错 不存在该成员getIdol//cout<<"偶像:"<<p.m_idol()<<endl;//报错 无法访问return 0;
}

错误示例:

4.1.3 struct 与 class

  • struct默认权限为公共
  • class默认权限为私有

错误示例:访问class中默认权限下的成员。

4.1.4 案例1:立方体类

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

代码如下:

#include <iostream>
using namespace std;class Cube
{
private://属性:长宽高int l;int w;int h;public://设置\获取属性void setLong(int ll){l=ll;}int getLong(){return l;}void setWidth(int ww){w=ww;}int getWidth(){return w;}void setHeight(int hh){h=hh;}int getHeight(){return h;}//方法:计算面积、体积、判断两个立方体是否相等int getSquare(){return 2*(l*h+h*w+h*w);}int getVolume(){return l*w*h;}//利用成员函数判断两个立方体是否相等void isEqual(Cube &c){if(l==c.getLong() && w==c.getWidth() && h==c.getHeight()){cout<<"两个立方体相同"<<endl;}else{cout<<"两个立方体不同"<<endl;}}
};//利用全局函数判断两个立方体是否相等
void isSame(Cube &c1,Cube &c2)
{if(c1.getLong()==c2.getLong() && c1.getWidth()==c2.getWidth() && c1.getHeight()==c2.getHeight()){cout<<"两个立方体相同"<<endl;}else{cout<<"两个立方体不同"<<endl;}
}int main()
{//创建对象Cube c1;c1.setLong(1);c1.setWidth(2);c1.setHeight(3);cout<<"c1的面积为:"<<c1.getSquare()<<endl;cout<<"c1的体积为:"<<c1.getVolume()<<endl;Cube c2;c2.setLong(1);c2.setWidth(2);c2.setHeight(3);//判断两个立方体是否相等isSame(c1,c2);c1.isEqual(c2);c2.setLong(2);isSame(c1,c2);c1.isEqual(c2);return 0;
}

输出如下:

4.1.5 案例2:点和圆(分文件)

题目:设计一个圆形类和一个点类,计算点和圆的关系。

代码如下:

#include <iostream>
using namespace std;//点类
class Point
{
private:int p_x;int p_y;public://设置/获取X,Yvoid setX(int x){p_x=x;}int getX(){return p_x;}void setY(int y){p_y=y;}int getY(){return p_y;}
};//圆类
class Circle
{
private:    int c_r;//半径Point center;//圆心public://设置/获取半径圆心void setR(int r){c_r=r;}int getR(){return c_r;}void setCer(Point cer){center=cer;}Point getCer(){return center;}
};//判断点和圆的关系
void isInCircle(Circle &c,Point &p)
{int dist=(c.getCer().getX()-p.getX()) * (c.getCer().getX()-p.getX())+(c.getCer().getY()-p.getY()) * (c.getCer().getY()-p.getY());int rdist=c.getR() * c.getR();if(dist==rdist){cout<<"点在圆上"<<endl;}else if(dist>rdist){cout<<"点在圆外"<<endl;}else{cout<<"点在圆内"<<endl;}
}int main()
{//创建点对象和圆对象Point p;Circle c;Point center;//设置点的坐标p.setX(0);p.setY(0);//设置园的半径及圆心的坐标c.setR(10);center.setX(10);center.setY(0);c.setCer(center);//判断点与圆的关系isInCircle(c,p);return 0;
}

输出如下:

分文件编写:

point.h

#pragma once//防止头文件重复包含
#include <iostream>
using namespace std;//点类
class Point
{
private:int p_x;int p_y;public://设置/获取X,Yvoid setX(int x);int getX();void setY(int y);int getY();};

point.cpp

#include "point.h"//点类//设置/获取X,Y
void Point::setX(int x)//Point::的作用是声明该函数是Point作用域下的成员函数
{p_x=x;
}
int Point::getX()
{return p_x;
}void Point::setY(int y)
{p_y=y;
}
int Point::getY()
{return p_y;
}

circle.h

#pragma once
#include <iostream>
using namespace std;
#include "point.h"//圆类
class Circle
{
private:    int c_r;//半径Point center;//圆心public://设置/获取半径圆心void setR(int r);int getR();void setCer(Point cer);Point getCer();};

circle.cpp

#include "circle.h"//圆类//设置/获取半径圆心
void Circle::setR(int r)
{c_r=r;
}
int Circle::getR()
{return c_r;
}void Circle::setCer(Point cer)
{center=cer;
}Point Circle::getCer()
{return center;
}

main.cpp

#include <iostream>
using namespace std;
#include "point.h"
#include "circle.h"//判断点和圆的关系
void isInCircle(Circle &c,Point &p)
{int dist=(c.getCer().getX()-p.getX()) * (c.getCer().getX()-p.getX())+(c.getCer().getY()-p.getY()) * (c.getCer().getY()-p.getY());int rdist=c.getR() * c.getR();if(dist==rdist){cout<<"点在圆上"<<endl;}else if(dist>rdist){cout<<"点在圆外"<<endl;}else{cout<<"点在圆内"<<endl;}
}int main()
{//创建点对象和圆对象Point p;Circle c;Point center;//设置点的坐标p.setX(0);p.setY(0);//设置园的半径及圆心的坐标c.setR(10);center.setX(10);center.setY(0);c.setCer(center);//判断点与圆的关系isInCircle(c,p);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com