c++面向对象的三大特性:封装,继承,多态
任何事物都可以是对象
封装
封装的意义---通过属性和行为来表现一个事物
设计一个圆类,求圆的周长(圆的周长 = 2 * π * r)
#include#include using namespace std; double pi = 3.14; //class代表设计一个类,后面跟着的是类的名字 class circle { //访问权限 //公共权限 public: //属性---使用变量 //半径 int c_r; //行为---使用函数 //获取圆的周长 double zc() { return 2 * pi * c_r; } }; int main() { //通过圆类来创建一个具体的对象 //通过一个类来创建一个对象(实例化) circle c1; //给圆的半径赋值 c1.c_r = 15; cout << "圆的周长是" << c1.zc() << endl; system("pause"); return 0; }
示例2
#include#include using namespace std; //创建一个学生类,用来设置学生的姓名和学号,可以展示学生的姓名和学号 class student { //权限 public: //属性和行为是类的成员 //属性 成员属性 成员变量 //行为 成员函数 成员方法 //属性---变量 string name; int id; //行为---函数 //展示学生信息 void showinfo() { cout << " 姓名: " << name << " 学号: " << id << endl; } //设置学生信息 void setname(string name1) { name = name1; } void setid(int id1) { id = id1; } }; int main() { //通过类创建一个实例 student s1; s1.name = "张三"; s1.id = 1; s1.showinfo(); student s2; s2.setname("李四"); s2.setid(2); s2.showinfo(); system("pause"); return 0; }
一个类里面的属性和行为通称为类的一个成员,属性叫做成员属性或属性变量,行为叫做成员函数或者成员方法
权限控制
三种访问权限
- 公共权限---public(成员类内可以访问,类外可以访问)
- 保护权限---protected(成员类内可以访问,类外不可以访问)
- 私有权限 ---private(成员类内可以访问,类外不可以访问)
创建一个person类,里面包含三种权限
class person {
//公共权限
public:
string name;
//保护权限
protected:
string car;
//私有权限
private:
int password;
public:
void func() {
name = "张三";
car = "奥迪";
password = 123456;
}
};
通过类创建一个实例
由于成员属性car和password是定义在保护权限和私有权限中的,所以在类外访问不到。
总结:公共权限在类内和类外都可以访问,保护权限和私有全休只能在类内访问,类外不行
stuct和class的区别
struct和class唯一的区别就在于默认的访问权限不同
- struct默认的访问权限为公共(public)
- class默认的访问权限为私有(private)
成员属性私有化
- 将成员属性设置为私有,可以自己控制读写权限
- 对于写权限,我们可以检测数据的有效性
自己控制读写权限 (刚开始把所有的属性设置为私有的,然后通过公共权限分别设置读写)
#include#include using namespace std; //创建一个类 class person { public: //设置名字 void setName(string name) { m_name = name; } //读取名字 string getName() { return m_name; } //读取年龄 int getAge() { //初始化年龄m_age为0 m_age = 0; return m_age; } //写入情人 void setLover(string lover) { m_lover = lover; } private: //private私有权限 string m_name;//名字 --- 设置权限为可读可写 int m_age;//年龄 ---- 设置权限为只读 string m_lover;//情人 ---- 设置权限为只写 }; int main() { //通过person创建一个实例 person p1; //通过实例写入名字 p1.setName("张三"); //通过实例读取名字 cout << "名字为: " << p1.getName() << endl; //通过实例读取年龄 cout << "年龄为: " << p1.getAge() << endl; //通过实例写入情人 p1.setLover("李四"); system("pause"); return 0; }
检测数据有效
示例:设计立方体类(cube --- 立方体)
通过长宽高三个属性来判断两个立方体是否相等(面积和体积两方面)
#include#include using namespace std; //创建一个立方体的类 class cube { public: //设置宽 void setW(int w) { m_W = w; } //读取宽 int getW() { return m_W; } //设置高 void setH(int h) { m_H = h; } //读取高 int getH() { return m_H; } //设置长 void setL(int l) { m_L = l; } //读取长 int getL() { return m_L; } //获取立方体的面积 int getS() { return 2 *((m_W * m_H) + (m_W * m_L) + (m_L * m_H)); } //获取立方体的体积 int getV() { return m_W * m_H * m_L; } //创建成员函数isSameByClass bool isSameByClass(cube &c) { if (m_H == c.getH() && m_W == c.getW() && m_L == c.getL()) { return true; } return false; } //私有属性 private: int m_W; int m_H; int m_L; }; //创建一个全局函数用来判断立方体是否相等 bool isSame(cube& a, cube& b) { if (a.getH() == b.getH()&& a.getW() == b.getW()&& a.getL() == b.getL()) { return true; } return false; } int main() { //通过类创建一个实例 cube c1; c1.setL(10); c1.setW(10); c1.setH(10); cout << "立方体c1的面积为: " << c1.getS() << endl; cout << "立方体c1的体积为: " << c1.getV() << endl; cube c3; c3.setL(10); c3.setW(10); c3.setH(10); cout << "立方体c3的面积为: " << c3.getS() << endl; cout << "立方体c3的体积为: " << c3.getV() << endl; cube c2; c2.setL(101); c2.setW(101); c2.setH(101); cout << "立方体c2的面积为: " << c2.getS() << endl; cout << "立方体c2的体积为: " << c2.getV() << endl; //调用全局函数来判断两个立方体是否一样 bool ret = isSame(c1, c2); if (ret == 1) { cout << "立方体c1和立方体c2一样 "<< endl; } else { cout << "立方体c1和立方体c2不一样 " << endl; } bool ret1 = isSame(c1, c3); if (ret1 == 1) { cout << "立方体c1和立方体c3一样 "<< endl; } else { cout << "立方体c1和立方体c不一样 " << endl; } bool ret2 = isSame(c2, c3); if (ret2 == 1) { cout << "立方体c2和立方体c3一样 "<< endl; } else { cout << "立方体c2和立方体c3不一样 " << endl; } //利用成员函数来判断立方体 bool ret3 = c2.isSameByClass(c3); if (ret3 == 1) { cout << "成员函数 立方体c2和立方体c3一样 " << endl; } else { cout << "成员函数 立方体c2和立方体c3不一样 " << endl; } system("pause"); return 0; }



