文章目录
1、类概述
类是一个新的数据类型,它和结构体有些相似,是由不同数据类型组成的结合体,但类要比结构体增加了操作数据的行为,这个行为就是函数。
2、类的访问控制关键字
1)public: 修饰的成员变量和函数 可以在类的内部和类的外部访问
2)private: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问
3)protected: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问, 用在继承里面
3、封装(Encapsulation)
A)封装,是面向对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。
B)封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
注意:有2层含义(把属性和方法进行封装 对属性和方法进行访问控制)
C++中类的封装
成员变量,C++中用于表示类属性的变量
成员函数,C++中用于表示类行为的函数
4、代码示例:
4.1、只调用类
#include <iostream> //包含C++的头文件
using namespace std; //使用命名空间 std 标准的命名空间(在这个命名空间中定义了很多标准定义)
//求圆形面积
class MyCircle // 定义类
{
public:
double m_r; //属性 成员变量
double m_s;
public:
double getR()
{
return m_r;
}
void setR(double r) //成员函数
{
m_r = r;
}
double getS()
{
m_s = 3.14 * m_r * m_r;
return m_s;
}
protected:
private:
};
int main()
{
MyCircle c1, c2;
c1.setR(10);
cout << "c1 s:" << c1.getS() << endl;
return 0;
}
输出结果:
4.2、在4.1的基础上调用类的封装
#include <iostream>
using namespace std;
//求圆形面积
class MyCircle
{
public:
double m_r; //属性 成员变量
double m_s;
public:
double getR()
{
return m_r;
}
void setR(double r) //成员函数
{
m_r = r;
}
double getS()
{
m_s = 3.14 * m_r * m_r;
return m_s;
}
protected:
private:
};
//类的封装的威力
//类封装的成员变量和成员函数 //可以调用类的成员函数
void printCircle01(MyCircle *pC)
{
cout << "r" << pC->getR() << endl;
cout << "s" << pC->getS() << endl;
}
void printCircle02(MyCircle &myc)
{
}
void printCircle03(MyCircle myc)
{
}
int main()
{
MyCircle c1, c2;
c1.setR(10);
cout << "c1 s:" << c1.getS() << endl;
c1.setR(11);
printCircle01(&c1);
c2.setR(20);
printCircle01(&c2);
return 0;
}
输出结果:
4.3、在4.2的基础上调用引用
#include <iostream>
using namespace std;
//求圆形面积
class MyCircle
{
public:
double m_r; //属性 成员变量
double m_s;
public:
double getR()
{
return m_r;
}
void setR(double r) //成员函数
{
m_r = r;
}
double getS()
{
m_s = 3.14 * m_r * m_r;
return m_s;
}
protected:
private:
};
//类的封装的威力
//类封装的成员变量和成员函数 //可以调用类的成员函数
void printCircle01(MyCircle *pC)
{
cout << "r" << pC->getR() << endl;
cout << "s" << pC->getS() << endl;
}
void printCircle02(MyCircle &myc)
{
cout << myc.getS() << endl;
}
void printCircle03(MyCircle myc)
{
}
int main()
{
MyCircle c1, c2;
c1.setR(10);
cout << "c1 s:" << c1.getS() << endl;
c1.setR(11);
printCircle01(&c1);
c2.setR(20);
printCircle01(&c2);
//引用
printCircle02(c2);
return 0;
}
输出结果:
4.4、public与private的区别
#include <iostream>
using namespace std;
//求圆形面积
class MyAdvCircle
{
private:
double m_r; //属性 成员变量
double m_s; //相当于你的银行卡密码
public:
double getR() //你的名字
{
return m_r;
}
void setR(double r) //成员函数
{
m_r = r;
}
double getS()
{
m_s = 3.14 * m_r * m_r;
return m_s;
}
};
int main()
{
MyAdvCircle c1, c2;
//c1.m_r = 10; // 无法访问私有类
c1.setR(10);
cout << "c1 s:" << c1.getS() << endl;
return 0;
}
输出结果: