c++/oop---对象指针/this指针/静态成员/封闭类

本文介绍了C++中的对象指针使用,包括成员函数调用的两种方式。同时,详细阐述了静态成员的特性和用途,强调了静态成员函数不能访问非静态成员变量。此外,还探讨了类的封闭特性,即类内包含类的情况,以及构造和析构函数的执行顺序。通过对这些概念的深入理解,有助于提升C++编程能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象指针

指向一个对象

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

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

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

很像一个栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值