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

    1、成员函数的另一种写法:类的成员函数和类的定义分开写

    • e.g.
    class rectangle
    {
        public:
        int w,h;
        int area();
        int p();
        void init(int w_,int h_);
    };
    int rectangle::area(){
        return w*h;
    }
    int rectangle::p(){
        return 2*(w+h);
    }
    void rectangle::init(int w_,int h_){
        w=w_;h=h_;
    }
    //rectangle::说明后面的函数是rectangle类的成员函数,而不是普通函数。就一用要通过对象、对象的指针、对象的引用才能调用
    

    2、类成员的可访问范围

    • 在类的定义中可以使用关键字说明类成员可被访问的范围,关键词可多次先后出现:

      • private:私有成员,只能在成员函数内访问
      • public:公有成员,可以在任何地方访问
      • protected:保护成员
    • 如果没有关键词,则缺省认为是私有的

    • 在类的成员函数内部,能访问:①当前对象的全部属性、函数 ②同类其他对象的全部属性、函数

    • 在成员函数以外的地方,只能够访问该类对象的公有成员

    • 设置私有成员的机制,叫做隐藏

    • 隐藏的目的是强制对成员变量的访问一定要通过成员函数进行,那么以后成员变量的类型等属性修改后,只要更改成员函数即可
      e.g.

    class person
    {
        private:
        char szname[30];//私有 名字
        public:
        int salary;
        void setname(char *name);
        void getname(char *name);
        void average(person e1,person e2);
    };
    void person::setname(char *name)
    {strcpy(szname,name)};//OK
    void person::getname(char *name)
    {strcpy(name,szname);}//OK
    void person::average(person c1,person c2)
    {
        cout<<c1.szname;//OK 访问其他同类对象的私有成员
        cout<<(c1.salary +c2.salary)/2;
    }
    int main()
    {
        person e;
        strcpy(e.ezname,"Tom")//error 编译错 在成员函数以外的地方不能访问私有成员
        e.setname("Tom")//OK
        e.salary=5000;//OK
        return 0;
    }
    

    3、成员函数的重载和参数缺省

    • 成员函数可以重载
    • 成员函数可以带缺省参数
      e.g.
    using namespace std;
    class location
    {
        private:
        int x,y;
        public:
        void init(int x=0,int y=0);
        void valueX(int val){x=val;}
        int valueX(){return X;}
        void location::init(int X,int Y)
        {x=X;y=Y;}
    };
    int main()
    {
        location A;
        A.init(5);
        A.valueX(4);
        cout<<A.valueX();//output 4
        return 0;
    }
    
    • 使用缺省参数时避免函数重载时的二义性
      e.g.
    class location
    {
        private:
        int x,y;
        public:
        void init(int x=0,int y=0);
        void valueX(int val=0){x=val;}
        int valueX(){return X;}
        void location::init(int X,int Y)
        {x=X;y=Y;}
    };
    location A;
    A.valueX();//error 编译出错,两个valueX为重载关系,不传入参数时都符合,编译器无法判断调用哪个valueX
    
  • 相关阅读:
    ios状态栏
    RGBA设置颜色
    应用程序的生命周期(转)
    UIViewController的生命周期
    UIViewController的创建
    UIButton
    NSUserDefaults
    打印结构体
    iOS 界面间的传值 属性传值 代理传值
    如何安装Homebrew
  • 原文地址:https://www.cnblogs.com/fzu-031702148/p/8456492.html
Copyright © 2011-2022 走看看