C++三大特性之一:封装

C++三大特性:封装,继承,多态

 对象:存在属性和行为
 封装:
         1.将属性和行为作为一个整体,表现生活中的事物
         2.将属性和行为加权限控制 private
        
 语法:

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


//=== 封装意义一:将属性和行为写在一起表示事物

      #include<iostream>
        #define _USE_MATH_DEFINES
        #include<math.h>
        
        using namespace std;
        class Circle{
            //属性
            public:
                int R;
            //方法
            double account_S(){
                return 2*M_PI*R;
            }
        };
        int main(){
            //创建对象
            Circle c1;
            //给对象赋值
            c1.R= 10;  //对象.属性
                        //对象.方法()
        }


   //    练习2 创建一个学生类===

#include<iostream>
#include<string>
using namespace std;
class Student{
    //类中属性和行为 称为成员
    //属性:成员变量
    //行为:成员方法
    public:
        string m_Name;
        int m_age;
    
    void showStudent(){
        cout<<"姓名:"<<m_Name<<endl;
        cout<<"年龄:"<<m_age<<endl;
    }
    void setName(string name){//形参name
        m_Name = name;
    }
    void setAge(int age){ //形参age
        m_age = age;
    }
};
int main(){
    Student stu1;
    stu1.m_Name = "小徐徐";
    stu1.m_age = 2;
    stu1.showStudent();
    
    Student stu2;
    stu2.setName("大徐徐"); //实参"大徐徐"
    stu2.setAge(18);
    stu2.showStudent();
} 


//===封装意义二:访问权限


公共权限 public :成员类 内部可以访问 外部可以访问
保护权限 protected : 内部可以访问 类外不可访问
私有权限 private :内部可以访问 类外不可访问


protected private区别主要在继承方面:
    protected :父亲的东西 继承人也可以访问
    private:父亲的小秘密,继承人不可以访问的

#include<iostream>
#include<string>
using namespace std;
class Person{
    public:
        string f_Name;//大家都可以知道的:我爹的名字
    protected:
        string f_Car;//继承人可以继承的:我爹的车
    private:
        string f_Secret;//继承人不能知道的:我爹的小秘密
    public:
        void func(){
            f_Name = "father";
            cout<<f_Name<<endl;
            f_Car = "bicycle";
            cout<<f_Car<<endl;
            f_Secret = "秘密";
            cout<<f_Secret<<endl;
        }
        void getName(string name){
            f_Name = name;
        }
};
int main(){
    Person fa1;
    fa1.f_Name = "TOTO";
//    fa1.Car = "moto"; 会报错 不能从类外修改(访问)
//    fa1.Secret = "no one"; 会报错 不能从类外修改(访问)
    fa1.func();
    //father 思考一下 为什么不是TOTO呢?
    //bicycle
    //秘密
} 


//====struct 和 class 区别

struct 和 class 区别:主要体现在默认权限上
      struct 默认权限为公开
      class 默认权限为私有

#include<iostream>
#include<string>
using namespace std;
class EX_Private{
    string ex_name = "臭徐徐";
};
struct EX_Public{
    string ex_name = "香徐徐";
};
int main(){
    EX_Private a;
    EX_Public b;
//    cout<<a.ex_name; 会报错
    cout<<b.ex_name;
}


这里会报警告 为什么呢?
假设我强行想改变私有属性 应该怎么做呢?
        回答:  结合公有方法,改变私有变量
                  结合公有方法 一个set 让私有属性 = 形参
                                         一个get return 私有属性
       总结:通过方法内部的形参改变私有属性 ,从而返回改变后的属性
        


//======成员属性设置为私有=======


成员属性私有化优点:
        1.可以自己控制读写权限
        2.对于写权限,我们可以检测数据的有效性

#include<iostream>
#include<string>
using namespace std;
class Person{
    public:
        void setName(string name){
            m_Name = name;
        }
        string getName(){
            return m_Name;
        }
        
        void setAge(int age){ //在set中经常加入条件判断输入的数据是否合法
            if(age>1000 || age<0){
                cout<<"不是人"<<endl;
                return;
            }
            else{
                m_Age = age;//属性 = 形参
            }
        }
        int getAge(){
            return m_Age;
        }
    private:
        string m_Name;
        string m_Lover;
        int m_Age;
};
int main(){
    Person oneper;
    oneper.setName("GUGU");    
    cout<<"姓名:"<<oneper.getName()<<endl;

    oneper.setAge(2000);
    cout<<"年龄:"<<oneper.getAge()<<endl;
//同一个对象不能对一个属性赋值两次吗?        
    oneper.setAge(2);
    cout<<"年龄:"<<oneper.getAge()<<endl;
    
    //cout<<oneper.Lover()<<endl;    不能直接改变私有属性 会报错
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值