c++ 类指针

在C++中,类的指针是一个指向类对象的指针。类的指针可以像普通指针一样用于动态分配内存、访问成员函数和成员变量。通过类的指针,可以实现多态性、动态绑定和其他面向对象编程的特性。

1. 定义和初始化类的指针

类的指针声明和普通指针类似,只不过指针类型是一个类类型。

#include <iostream>
using namespace std;

class MyClass {
public:
    void display() {
        cout << "Display function of MyClass" << endl;
    }
};

int main() {
    MyClass obj;        // 创建类对象
    MyClass* ptr = &obj; // 声明指向类对象的指针并初始化

    // 通过指针访问对象的成员函数
    ptr->display();     // 输出: Display function of MyClass

    return 0;
}

在上述例子中,ptr 是一个指向 MyClass 对象 obj 的指针。通过 ptr->display() 可以调用 objdisplay() 成员函数。

2. 通过指针访问类的成员

使用类的指针可以访问类的成员变量和成员函数。可以使用箭头操作符 -> 来访问指针所指向的对象的成员。

#include <iostream>
using namespace std;

class MyClass {
public:
    int data;
    void display() {
        cout << "Data: " << data << endl;
    }
};

int main() {
    MyClass obj;
    obj.data = 10;

    MyClass* ptr = &obj; // 指向类对象的指针
    cout << ptr->data << endl; // 访问成员变量,输出: 10
    ptr->display();            // 访问成员函数,输出: Data: 10

    return 0;
}

3. 类的指针与多态性

多态性是面向对象编程中的一个重要概念。通过类的指针,可以实现运行时的动态绑定。使用虚函数和基类指针,程序可以在运行时确定调用哪个函数。

#include <iostream>
using namespace std;

class Base {
public:
    virtual void show() {
        cout << "Base class show function" << endl;
    }
};

class Derived : public Base {
public:
    void show() override {
        cout << "Derived class show function" << endl;
    }
};

int main() {
    Base* bptr; // 基类指针
    Derived d;

    bptr = &d; // 基类指针指向派生类对象
    bptr->show(); // 调用的是派生类的 show() 函数,输出: Derived class show function

    return 0;
}

在这个例子中,bptr 是一个基类 Base 的指针,但它指向了一个派生类 Derived 的对象 d。由于 show() 函数是虚函数,所以 bptr->show() 实际上调用的是 Derived 类中的 show() 函数,从而实现了多态性。

总结

  • 定义和初始化:类的指针可以指向类的对象,并使用 & 操作符获取对象的地址进行初始化。
  • 访问成员:可以使用箭头操作符 -> 通过指针访问对象的成员函数和成员变量。
  • 多态性:通过基类指针指向派生类对象,并调用虚函数,可以实现多态性,允许在运行时确定调用的是哪个类的函数。
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥时候才能找到工作呀

记录学习中的疑难杂症,感谢照顾

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值