C++认为万事万物皆为对象,对象上有其行为(通常是一个个封装的函数,也叫成员函数)和属性(也叫成员属性)。
比如人就可以作为一个对象,年龄,身高等则是人的属性,走,跳,吃饭则是人的行为。
具有相同性质的对象我们可以抽象称之为类。人属于人类。
1.封装
封装是c++面向对象三大特性之一。
封装的意义 1 将属性和行为作为一个整体,表现生活中的事物。
2 将属性和行为加以权限控制。
定义一个类的语法:
class 类名{访问权限:属性/行为};
下面写一个圆的类。
#include<iostream>
using namespace std;
const double PI=3.14;//定义一个常量 圆周率。
class circle
{
//权限
public:
//属性
//半径
int m_r;
//行为
//输出圆的周长
void coutZC()
{
cout<<"圆的周长是:"<<2*PI*m_r<<endl;
}
};
int main()
{
circle c1; //定义一个圆
c1.m_r=10; //给这个圆的半径初始化
c1.coutZC(); //调用这个圆的行为,也叫成员函数。
return 0;
}
2.访问权限
三种权限:
公共权限 public: 类内类外都可以访问
私有权限 private: 类内可以访问,类外不可以访问
保护权限 protected: 类内可以访问,类外不可以访问
在哪访问就是你想在哪使用这个变量或者函数,比如一个类内私有权限定义的数,在类外你就不能在main()函数中通过 c1.m_r=100; 这种赋值操作来改变他的值,也不能输出这个数,这个数你只能在他的类中直接使用。在私有权限下定义函数也是,只能在类内使用。
3.struct和class的区别
他俩功能都是创建一个类,区别就是如果你不加权限限制,struct中默认是私有权限,class中默认是公共权限。
4.成员属性私有化。
就是一般我们会将成员属性设置为私有权限,然后通过公共权限的函数自己来控制读和写。这样对于写权限我们可以监测数据的有效性。
案例:
#include<iostream>
using namespace std;
const double PI=3.14;//定义一个常量 圆周率。
class circle
{
//公共权限
public:
//行为
//输出圆的周长
void coutZC()
{
cout<<"圆的周长是:"<<2*PI*m_r<<endl;
}
void cinR(int r) //输入圆的半径
{
//数据有效性检测
if(r<0||r>100)
{
cout<<"输入的半径长度不合法"<<endl;
return ;
}
m_r=r;
}
void cinYX(int x,int y) //定义圆的圆心
{
m_x=x;
m_y=y;
}
void coutR() //输出圆的半径
{
cout<<"圆的半径是:"<<m_r<<endl;
}
void coutYX() //输出圆的圆心坐标
{
cout<<"圆的圆心坐标是:"<<m_x<<' '<<m_y<<endl;
}
//私有权限 只能在类内调用,但可以通过定义调用公共权限的函数在类内调用,以达到同样的效果。
private:
//属性
//半径
int m_r;
//圆心坐标
int m_x,m_y;
void test()
{
cout<<"test函数被调用"<<endl;
}
};
int main()
{
circle c1; //定义一个圆
c1.cinR(10); //给这个圆的半径初始化
c1.cinYX(0,10); //初始化圆心
c1.coutR(); //输出圆的半径
c1.coutYX(); //输出圆的圆心坐标
c1.coutZC(); //调用这个圆的行为,也叫成员函数。
c1.test(); //运行时会报错,因为这个函数在私有权限下定义的。
c1.m_r=100; //运行时会报错,因为这个函数在私有权限下定义的。
return 0;
}