c++/oop---对象指针/this指针/静态成员/封闭类
对象指针
指向一个对象
写法 p->sum() 和 (*p).sum() 是等价的,前者更加直观些
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
class Node{
public:
int x,y;
int sum();
~Node();
Node(){
x=1,y=1;
}
};
int Node::sum(){
return x+y;
}
Node::~Node(){
puts("aaa");
}
int main(){
Node t;
cout<<t.x<<' '<<t.y<<' '<<t.sum()<<endl;
Node *p=&t;
cout<<p->sum()<<' '<<(*p).sum()<<endl;
return 0;
}
this指针
this指针是一个指向对象的指针,隐含在类的成员函数中,用来指向成员函数所属类正在被操作的对象。
静态成员
前面加了 static 关键字的成员,可以是函数或者变量
静态成员函数
静态成员函数为所有对象共享,不具体作用于某一个对象,故不需要对象就可以访问
访问方法
类名 :: 函数名
对象.函数名
静态函数不可以访问非静态成员变量,无论是 public 还是 private
似乎也不可以访问非静态成员变量
静态成员必须要初始化,而且只能在类外初始化
e.g int node::number =0;
静态变量本质上是全局变量,设置的目的就是把关系紧密的全局变量放进类里,使结构清晰。
在类外进行初始化,受访问权限控制
[Error] ld returned 1 exit status --- 检查静态成员有没有初始化?
封闭类
意思其实是类套类
在初始化的时候,一定要给里面的类也初始化,不然编译错
对象成员的构造函数调用次序和对象成员在类中的说明次序一致
#include <iostream>
#include <string>
using namespace std;
class Base {
public:
int k;
Base(int n):k(n) { }
};
class Big
{
public:
int v;
Base b;
Big (int x):v(x),b(x){}
Big (Big & t):v(t.v),b(t.v){}
//初始化只能这样做,写在函数里就报错
};
int main()
{
int n;
while(cin >>n) {
Big a1(n);
Big a2 = a1;
cout << a1.v << "," << a1.b.k << endl;
cout << a2.v << "," << a2.b.k << endl;
}
}
构造时,先执行对象成员的构造函数,在执行封闭类的构造函数
析构时,先执行封闭类的析构函数,在执行对象的析构函数
很像一个栈