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;
    }
}

 

 

 

构造时,先执行对象成员的构造函数,在执行封闭类的构造函数

析构时,先执行封闭类的析构函数,在执行对象的析构函数

很像一个栈

 

posted @ 2022-02-27 15:32  liankewei123456  阅读(65)  评论(0编辑  收藏  举报