zoukankan      html  css  js  c++  java
  • 类和对象的基本概念

    CC++struct区别

    n c语言struct只有变量

    n c++语言struct 既有变量,也有函数

    类的封装

    我们编写程序的目的是为了解决现实中的问题,而这些问题的构成都是由各种事物组成,我们在计算机中要解决这种问题,首先要做就是要将这个问题的参与者:事和物抽象到计算机程序中,也就是用程序语言表示现实的事物。

    那么现在问题是如何用程序语言来表示现实事物?现实世界的事物所具有的共性就是每个事物都具有自身的属性,一些自身具有的行为,所以如果我们能把事物的属性和行为表示出来,那么就可以抽象出来这个事物。

    比如我们要表示人这个对象,在c语言中,我们可以这么表示:

    typedef struct _Person{
        char name[64];
        int age;
    }Person;
    typedef struct _Aninal{
        char name[64];
        int age;
        int type; //动物种类
    }Ainmal;
    
    void PersonEat(Person* person){
        printf("%s在吃人吃的饭!
    ",person->name);
    }
    void AnimalEat(Ainmal* animal){
        printf("%s在吃动物吃的饭!
    ", animal->name);
    }
    
    int main(){
    
        Person person;
        strcpy(person.name, "小明");
        person.age = 30;
        AnimalEat(&person);
    
        return EXIT_SUCCESS;
    }

    定义一个结构体用来表示一个对象所包含的属性,函数用来表示一个对象所具有的行为,这样我们就表示出来一个事物,在c语言中,行为和属性是分开的,也就是说吃饭这个属性不属于某类对象,而属于所有的共同的数据,所以不单单是PeopleEat可以调用Person数据,AnimalEat也可以调用Person数据,那么万一调用错误,将会导致问题发生。

    从这个案例我们应该可以体会到,属性和行为应该放在一起,一起表示一个具有属性和行为的对象。

    假如某对象的某项属性不想被外界获知,比如说漂亮女孩的年龄不想被其他人知道,那么年龄这条属性应该作为女孩自己知道的属性;或者女孩的某些行为不想让外界知道,只需要自己知道就可以。那么这种情况下,封装应该再提供一种机制能够给属性和行为的访问权限控制住。

    所以说封装特性包含两个方面,一个是属性和变量合成一个整体,一个是给属性和函数增加访问权限。

    封装

    1. 把变量(属性)和函数(操作)合成一个整体,封装在一个类中
    2. 对变量和函数进行访问控制

    访问权限

    1. 在类的内部(作用域范围内),没有访问权限之分,所有成员可以相互访问
    2. 在类的外部(作用域范围外),访问权限才有意义:public,private,protected
    3. 在类的外部,只有public修饰的成员才能被访问,在没有涉及继承与派生时, private和protected是同等级的,外部不允许访问

     

     

    //封装两层含义
    //1. 属性和行为合成一个整体
    //2. 访问控制,现实事物本身有些属性和行为是不对外开放
    class Person{
    //人具有的行为(函数)
    public:
        void Dese(){ cout << "我有钱,年轻,个子又高,就爱嘚瑟!" << endl;}
    //人的属性(变量)
    public:
        int mTall; //多高,可以让外人知道
    protected:
        int mMoney; // 有多少钱,只能儿子孙子知道
    private:
        int mAge; //年龄,不想让外人知道
    };
    
    int main(){
    
        Person p;
        p.mTall = 220;
        //p.mMoney 保护成员外部无法访问
        //p.mAge 私有成员外部无法访问
        p.Dese();
    
        return EXIT_SUCCESS;
    }

     [struct和class的区别?]

      class默认访问权限为private,struct默认访问权限为public.

    class A{
        int mAge;
    };
    struct B{
        int mAge;
    };
    
    void test(){
        A a;
        B b;
        //a.mAge; //无法访问私有成员
        b.mAge; //可正常外部访问
    }

    将成员变量设置为private

    1. 可赋予客户端访问数据的一致性。

    如果成员变量不是public,客户端唯一能够访问对象的方法就是通过成员函数。如果类中所有public权限的成员都是函数,客户在访问类成员时只会默认访问函数,不需要考虑访问的成员需不需要添加(),这就省下了许多搔首弄耳的时间。

    1. 可细微划分访问控制。

    使用成员函数可使得我们对变量的控制处理更加精细。如果我们让所有的成员变量为public,每个人都可以读写它。如果我们设置为private,我们可以实现“不准访问”、“只读访问”、“读写访问”,甚至你可以写出“只写访问”。

    class AccessLevels{
    public:
        //对只读属性进行只读访问
        int getReadOnly(){ return readOnly; }
        //对读写属性进行读写访问
        void setReadWrite(int val){ readWrite = val; }
        int getReadWrite(){ return readWrite; }
        //对只写属性进行只写访问
        void setWriteOnly(int val){ writeOnly = val; }
    private:
        int readOnly; //对外只读访问
        int noAccess; //外部不可访问
        int readWrite; //读写访问
        int writeOnly; //只写访问
    };
  • 相关阅读:
    密码等级
    ie兼容透明
    分割线
    支付宝银行判断接口
    date只能选择今天之后的时间js
    离开页面之前提示,关闭,刷新等
    使用 Linux 系统的常用命令
    C#窗体简单增删改查
    1
    二维数组
  • 原文地址:https://www.cnblogs.com/mmc9527/p/10429789.html
Copyright © 2011-2022 走看看