zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    poj 1392 Ouroboros Snake
    poj 1780 Code
    poj 2513 Colored Sticks
    ZOJ 1455 Schedule Problem(差分约束系统)
    poj 3169 Layout (差分约束)
    ZOJ1260/POJ1364国王(King)
    poj 1201/zoj 1508 intervals 差分约束系统
    zoj 2770 Burn the Linked Camp (差分约束系统)
    构造函数和析构函数
    PHP面向对象——静态属性和静态方法
  • 原文地址:https://www.cnblogs.com/li12242/p/8321780.html
Copyright © 2011-2022 走看看