C++:类 & 对象

    技术2022-07-10  249

    类成员函数

    就是定义与原型写在类里面的函数,能操作类的所有对象中的所有成员

    class Box { public: double length; // 长度 double breadth; // 宽度 double height; // 高度 double getHeight(); //类中定义的所有成员函数都是内联的 double getVolume() { return length * breadth * height; } };

     也可以在类外部定义类成员函数,但得使用范围解析运算符 ::

    double Box::getHeight() { return height; }

     

    类访问修饰符

    就是public、private、protected

    成员和类的默认访问修饰符是private。

    public成员(就不提了)private成员

    类自己与友元函数才能访问。

    class Box{ double width; //默认是private,类以外就无法访问了 public: double length; //类内类外都可以通过成员变量+ . + length调用。 }; protected成员

    子类也能访问

    class Box{ protected double width; //子类可以访问 }; class BoxSon : Box{ //不写就是private继承 public: double getParentWidth(void); //声明 }; double BoxSon::getParentWidth(void) { //外部定义 return width; //父类的protected成员,在Box类是private }

    构造函数 & 析构函数

    构造函数(无参 or 带参)

    概念跟java里的差不多,不返回任何类型(包括void),一般用来初始化成员变量,可以在外部用Box::box( ...){...}定义。

    使用初始化列表来初始化字段

    Box::box( double wid, double hei ): height(hei), width(wid) { ... }//注意,这里初始化顺序是按照声明顺序来的,即width=wid 先执行。(声明与初始化同步是个好习惯)

    等价于:

    Box::box( double wid ): { width=wid; height=hei; ... }

    析构函数

    在属于当前类的对象被删除的时候执行,与构造函数同名,没有参数也不返回任何值。

    一般用于在跳出程序(比如关闭文件,释放内存等)前释放资源。

     

    class Line { public: void setLength( double len ); Line(); // 这是构造函数声明 ~Line(); // 这是析构函数声明 };

    拷贝构造函数(有点复杂后面再看)

    三种场景会调用此函数:

    用一个对象初始化同类型的另一个对象,拷贝此对象。Line line2 = line1当对象作为参数被传递给函数时,拷贝此对象;func(Line line)当一个函数返回的是某个对象时,拷贝此对象。func(){return line}

    场景结束后,会析构掉拷贝出来的对象。

    友元函数

    定义在类外部(声明在内部),能访问类中private与protected成员(但它不是成员函数)。

    友元类

    友元类的所有成员都是另一个类的友元,只需要在这个类的定义中声明:

    class A{ friend class B; }

    那么B能访问A的任何成员,但是反过来不行!!!

    inline函数(内联)

    很简单的小体积函数,编译时编译器会把函数体挪到调用它的地方,少了调用时间,增

    加了空间成本。

    this指针

    this代表某对象的指针,例如:

    Class B{ public: int long; int getLong(B b){ return this->long; //this代表调用getLong()方法的B对象的指针。 } }

    静态成员

    1. 静态成员变量

    在类的所有实例中只有一个副本,即实例们共享这一个变量,实例对此变量的修改会被同步。必须在类外用::定义(即分配内存,但是可以不初始化-即赋值);

    int Box::objectCount = 0;//也可以不写 =0

    2. 静态成员函数

    只能访问静态成员 + 类外部其他函数。

    类外通过::访问(类似于java)

    Box::getCount();

     

    Processed: 0.040, SQL: 9