C++ Primer Plus 学习之对象和类

加油鸭


C++中的类

  • 类中的数据默认是 private 的
  • 结构 struct 默认是 public,而类为 private。
  • 类方法可以访问类的 private 组件。
  • 同一个类的方法之间可以不使用作用域解析运算符直接互相调用。
  • 类创建的每个对象都有自己的存储空间,用于存储其内部变量和成员,但同一个类的所有对象共享同一组类方法,即每种方法只有一个副本。

类的构造函数和析构函数

  • 构造函数和析构函数都没有声明类型。
  • 当且仅当没有定义任何析构函数时,编译器才会提供默认构造函数。当类定义了构造函数后,就必须为它提佛那个默认构造函数。如果提供了非默认构造函数,但没有提供默认构造函数,想使用是默认构造函数不正确的。

    1
    A a; // 会报错
  • 接受一个参数的构造函数允许使用赋值语法将对象初始化为一个值。

    1
    Object obj = 1; // 如果有构造函数 Object(int)的话

类作用域

  • 作用域为类的常量 static
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //枚举类型
    class Bakery
    {
    private:
    enum {Months=12};
    double costs[Months];
    ...
    }
    //使用关键字static
    class Bakery
    {
    private:
    static const int Months=12;
    double costs[Months];
    }
    //Months为静态变量,它和其他静态变量存储在一起。

this指针

  • this指针指向用来当前调用成员函数的对象的地址
  • 在成员函数后面加const的实质是给第一个参数即this指针加const属性。
  • his指针被作为隐藏参传递给成员函数 – 且只能是第一个参数。
1
2
3
4
5
6
7
8
9
//stock00.h
const Stock &topval(const Stock &s)const;

//stock00.cpp
const Stock &Stock::topval(const Stock &s)const
{
if(s.total_val>total_val)return s;
return *this;
}