详解C++中的对象指针与对象数组

宋时安
宋时安
发布时间:2026-10-13| 4人浏览过
原创

深入理解C++面向对象编程中的对象指针与对象数组机制,掌握正确的语法定义、地址访问方式及复杂构造函数下的初始化技巧。

对象指针的定义与使用

第1步:定义指向对象的指针变量

C++在建立对象时,会为每个对象分配存储空间,其起始地址即为对象的指针。通过定义指针变量存放该地址,可实现间接访问。一般形式为:

类名 *指针名;

以下代码展示了 Time 类的对象指针定义与基本访问:

class Time
{
public:
    int hour;
    int minute;
    int sec;
    void get_time( );
};
void Time::get_time( )
{
    cout<<hour<<":"<<minute<<":"<<sec<<endl;
}

int main( )
{
    Time t1; // 定义t1对象
    Time *pt = &t1; // pt指向t1
    
    (*pt).hour; // 等价于 t1.hour
    pt->hour;   // 推荐使用
    
    pt->get_time( ); // 调用成员函数
}

第2步:定义指向对象数据成员的指针

对象成员也有地址。定义指向数据成员的指针方法与普通变量指针类似:

数据类型名 *指针名;

例如指向整型成员 hour:

    int *p1 = &t1.hour;
    cout << *p1 << endl; // 输出 t1.hour

第3步:定义指向对象成员函数的指针(重点)

成员函数属于类而非普通全局函数,不能直接赋值给普通函数指针。必须指定所属类。一般形式:

返回类型 (类名::*指针名)(参数表列);

注意:括号不可省略,否则优先级会导致语义改变(视为返回指针的函数)。

使指针指向公有成员函数:

    void (Time::*p2)(); // 定义指针变量
    p2 = &Time::get_time; // 注意取地址符,且需带类名作用域

通过对象使用该函数指针:

    (t1.*p2)(); // 调用 t1.get_time()

对象数组的创建与初始化

第1步:基本概念与声明

对象数组是元素均为同种对象类型的数组。定义时将自动调用构造函数:
Student stud[50];

第2步:单参数构造函数的初始化

若构造函数仅有一个参数,可在定义时直接提供实参列表:

// Student类构造函数: Student(int id);
Student stud[3] = {60, 70, 78}; // 合法,一一对应

第3步:多参数或含默认参数的构造函数初始化

当构造函数包含多个参数或使用默认参数时,直接在花括号内写数值会造成歧义。应采用 类名(...) 的形式显式调用构造函数:

class Box {
public:
    // 含默认参数构造函数
    Box(int h=10, int w=12, int len=15); 
};

int main( ) {
    Box a[3] = {
        Box(10, 12, 15), // 明确第一个元素实参
        Box(15, 18, 20), // 明确第二个元素实参
        Box(16, 20, 26)  // 明确第三个元素实参
    };
}

运行结果显示各对象体积计算正确:
volume of a[0] is 1800

关键注意事项

  • 内存模型:成员函数代码存放在公共的代码段空间,非对象内部。因此获取地址时需使用 &类名::函数名。
  • 语法优先级:定义成员函数指针时,(类名::*p) 外侧括号至关重要,用于覆盖 *p 优先结合的错误。
  • 避免歧义:初始化复杂数组时,始终采用显式调用构造函数的写法以确保清晰。

以上就是C++对象指针与对象数组的详细用法,更多关于C++面向对象进阶的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。