zoukankan      html  css  js  c++  java
  • c++学习记录(四)

    类和对象的概念与用法

    - 从客观事物中抽象出类

    例:写一个程序,输入矩形的长和宽,输出面积和周长。

    • 矩形的属性是长和宽,因此需要两个变量分别表示长和宽
    • 一个矩形的行为(或者可以对矩形进行的操作):设置长宽,计算面积,计算周长(还有很多,这里只针对本题)
    • 行为各用一个函数实现,他们都需要长宽两个变量
    • 将长宽变量和设置长宽,求面积,求周长的三个函数封装在一起,就能够形成一个“矩形类”
    • 长宽变量成为该“矩形类”的“成员变量”,三个函数成为该类的“成员函数”,成员函数及成员变量统称为函数的类的成员
    • 类像是带着函数的结构

    class CRectangle
    {
        public:
        int w,h;
        int Area()
            {
                return w*h;
            }
        int Perimeter()
            {
                 return 2*(w+h);
            }
        void Init(int w_,int  h_)
            {
                w=w_;
                h=h_;
            }
    };//必须有分号
    
    • 注:由struct,class,做出来的都可以称为类,由类定义的变量称为对象


    - 对象的内存分配

    • 和结构变量一样,对象所占用的空间大小等于所有成员变量大小之和

    • 对象不包含成员函数,成员函数只有一份,被成员变量所共享。

    • 每个对象都有自己的存储空间,一个对象的某个成员变量被改变了,不会影响到另一个对象


    - 对象间的运算

    • 和结构变量一样,对象之间可以用“=”赋值,但是不能用"==","!=",">","<",">=","<="进行比较,除非这些运算符经过了重载


    - 使用类的成员和成员函数

    • 用法一:对象名.成员名

    CRectangle r1,r2;
    r1.w=5;
    r2.Init(5,4);
    
    • 用法二:指针->成员名

    CRectangle r1,r2;
    CRectangle *p1=&r1;
    CRectangle *p2=&r2;
    p1->w=5;
    p2->Init(5,4);//Init作用在p2指向的对象上
    
    • 用法三:引用名.成员名

    CRectangle r2;
    CRctangle &rr=r2;
    rr.w=5;
    rr.Init(5,4);//rr的值变了,r2的值也变
    

    例:

    void Print(CRectangle &r)
    {
    cout<<r.Area()<<","<<r.Perimeter();
    }
    CRectangle r3;
    r3.Init(5,4);
    Print (r3);
    

    则上述代码计算的是r3的面积与周长


    - 类的成员函数和类的定义可以分开写

    • 例:

    class CRectangle
    {
    public:
    int w,h;
    int Area();//
    };
    int CRectangle :: Area()
    {
    return w*h;
    }
    
    • 注:CRectangle :: 说明后面的函数是CRectangle类的成员函数,而非普通函数,那么一定要通过对象或对象的指针或对象的引用才能调用


    - 类的成员的可访问范围

    • private:私有成员,只能在成员函数内访问

    • public:公有成员,可以在任何地方访问

    • protected:保护成员

    以上三种关键字出现的次数和先后次序没有限制

    格式###

    class className()
    {
    private:
    私有属性和函数
    public:
    共有属性和函数
    protected:
    保护属性和函数
    };
    

    若某个成员前面没有上述关键字,则缺省的认为是私有的

    访问范围

    • 在类的成员函数内部可以访问:
    1.当前对象的全部属性,函数
    2.同类其他对象的全部属性,函数
    • 在类成员函数以外的地方,只能访问该类的对象的公有成员

    设置私有成员的机制称为“隐藏”


    - 成员函数的重载和参数缺省

    同一般函数的重载和参数缺省

    使用缺省参数时要注意避免有函数重载时的二义性

    例:
    class Location
    {
    public:
    void value X(int val=0){x=val;}
    int value X(){return x;}
    };
    Location A;
    A.value X();//编译错误,编译器无法判断调用哪个value X
    
  • 相关阅读:
    [其他]JAVA与C#的Socket通信
    Ext 向Ext.form.ComboBox()中添加列表的分类
    Extjs tree 过滤查询功能
    Extjs TreePanel API详解
    JVM虚拟机21: 1.8中废弃永久代(PermGen)迎来元空间(Metaspace)
    JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
    Java虚拟机19:再谈四种引用状态
    Java虚拟机18:Java对象大小、对象内存布局及锁状态变化
    Java虚拟机17:互斥同步、锁优化及synchronized和volatile
    Java虚拟机16:Java内存模型
  • 原文地址:https://www.cnblogs.com/2002ljy/p/12244943.html
Copyright © 2011-2022 走看看