C++ and OO Num. Comp. Sci. Eng.

class 关键字提供了一种包含机制,将数据和操作数据的方法结合到一起,作为内置类型来使用。

类可以包含私有部分,仅其成员和 friend 类访问,公有部分可以在程序中任意位置处访问。

构造函数与类重名。析构函数用来定义对象销毁时操作。

class pt2d { // class for 2D points
private: // private members
    double x; // x coordinate
    double y; // y coordinate

public: // public members 
    pt2d(double r, double s) { // constructor
        x = r; y =s;
    }
    void move(double, double); // move to new position
    void move(pt2d); // move to new position
    void draw() const; // a const member
    friend double norm(pt2d); // a friend
};

在类的定义中,符号 :: 用来在类外部定义成员。

const 后缀定义的方法只能读取成员变量,但是不能对成员变量进行修改。

在类的方法中,可以直接使用属性名对属性值进行操作,而其他对象的属性则需用 . 号对其进行索引。

友元(friend)不属于类,但是可以访问类的成员。

在函数声明中定义的函数默认为 inline 函数。

对私有属性的保护使得自定义类更加安全,也更容易维护。

可以提供多个构造函数,程序会按照参数选择对应的构造函数进行操作。

没有参数的构造函数为默认构造函数。

struct 是默认类型都为 public 的类。

关键字 this 为一常指针指向方法所对应的对象。

Copy Constructors and Copy Assignments

通常情况下,当类中没有显式定义 copy constructor 与 assignment operator 的话,会默认生成一个对逐个成员进行复制的初始化方法。

销毁对象时,析构函数不需要用户显式进行调用,申请的空间会自动销毁。

但是若类中包含指针,且多个对象内指针指向同一个向量,因此这个向量会被销毁多次,造成错误。

operator 作为关键字允许类对操作符=进行重载,例如

T& T: :operator=(const T&);

this 为指向对象的向量,因此 *this 为对象实体。

Firend

友元可以属于许多类里,并且可以访问类的私有成员和属性。

友元不是类成员因此没有 this 指针。

一个类可以是其他类的友元,因此此类的所有方法都是友元。

class X{
    void f();
    int g(int);
};

class Y{
    // ... in addition to other members
    friend void X::f(); // f() of X becomes friend of Y
};

class Z{
    // ... in addition to other members
    friend class X; // all functions of X become friends of class Z
};

Static Members

C++ 提供静态成员来避免全局变量的使用。

静态方法,当一个函数需要访问类的成员,但是不属于特定的对象时,可以声明为静态方法。

由于静态成员不属于特定的对象,因此其引用必须用类名称与双冒号进行索引。

静态变量的定义与变量的声明与初始化相同,也类似与函数的声明。

尽管静态变量的私有的,但是它可以不通过成员函数定义。

Constant and Mutable Members

constant 成员方法不修改类型的对象。

当一个成员变量声明为 mutable 时,它可以由常成员方法进行修改。

Class Objects as Members

一个类可以作为其他类的成员变量,而这个变量初始化可以与其他成员不同。

成员对象初始化通过构造函数内的初始化列表内实现。

构造成员对象的初始化在类自身的构造函数之前调用,例如

class line{
    pt2d oneend;
    pt2d otherend;
    bool direction;
public:
    line( pt2d, pt2d, bool );
    line( pt2d, bool );
}

line:: line( pt2d a, pt2d b, bool dir ): otherend(b), oneend(a) {
    direction = dir;
}

line: :line (pt2d b, bool dir): oneend(), otherend(b) { 
    direction = dir;
}

Array of Classes

当类有默认构造函数时,可以定义此类的向量。
当类没有默认构造函数时,则无法直接定义此类的向量。

Pointers to Members

原文地址:https://www.cnblogs.com/li12242/p/8321780.html