1. this指针
1.0 常识性问题
- 当对象访问类中的非静态成员时,编译器会自动将对象的地址隐式的作为第一参数传递给this指针。
- 类的静态成员属于整个类,不属于某一个对象,没有对象也就谈不上this指针。
- 编译器的实现决定this指针保存的位置。
- this指针是一种特殊的指针,无法直接获取this指针的地址。
- this指针并不是类的成员,不属于类的一部分。
- this指针是一个常量,不能修改this指针的值。
1.1 链式访问对象成员
1.1.0 实例
图书馆类Book有两个数据成员:书名name(string)、定价price(double)。编写一个图书类。使用省却构造函数和析构函数,只需写出set和get方法,要求能通过链式访问设置的数据成员,并且方法的参数与数据成员同名。
class Book
{
private:
string _name;
double _price;
public:
string getName() { return _name; }
double getPrice() { return _price; }
Book * setName(string name) { this->_name = name; return this; }
Book * setPrice(double price) { this->_price = price;return this; }
};
int main()
{
Book * book = new Book;
book->setName("C\C++")->setPrice(65.5);
cout << book->getName().c_str()<< " : " << book->getPrice() << endl;
}
为了支持链式访问,只需在函数中返回对象的地址,也就是this指针,返回类型为Book的指针。
1.2 通过空指针调用类的成员函数
1.2.0 下面程序中main函数分别通过空指针pTest调用类中四个函数,调用情况如下分析。
class Test
{
private:
static int stat;
int val;
public:
static void func1() { cout << stat << endl; }
void func2() { cout << "Test" <