C++面向对象编程基础:类与对象的定义、成员访问及封装

竹里
竹里
发布时间:2026-10-16| 5人浏览过
原创

本文详解C++面向对象核心概念,包括对象与类的抽象关系、面向过程与面向设计的区别。通过完整的代码实例,演示如何定义类、分离头文件实现,以及利用对象名、指针和引用三种方式访问成员,同时探讨内联函数的应用。

什么是对象

C++中的任何事物都可以被视为对象,即“万物皆为对象”。对象由两部分组成:

  • 数据(属性):描述对象的状态或特征。
  • 函数(行为):描述对象对外界信息的响应操作。

类与对象是抽象与特例的关系:具有相同属性和行为的多个对象可以抽象为一个class(类),类是对象的抽象,而对象则是类的具体实例。

面向过程 vs 面向对象

面向过程

面向过程的设计以功能为核心,程序被视为算法与数据结构的集合,两者独立设计:

  • 围绕功能编写,通常用一个函数实现一个具体功能。
  • 程序 = 算法 + 数据结构,二者松散耦合。

面向对象

面向对象的设计将数据和处理数据的算法封装在一起:

  • 将逻辑和状态统一在对象中。
  • 对象 = 算法 + 数据结构。
  • 程序运行通过向各个对象发送消息来驱动:程序 = 对象 * N + 消息。

什么是类

类是用户自定义的数据类型,不仅包含数据成员,还包含具备行为能力的成员函数。类定义了创建对象的标准结构。
// 简图示意:Class 指向多个 Object 实例
Object A, Object B...

类的结构与实现

类的基本格式

class Student {
private:
    // 私有的数据成员
    int num;
    string name;
    char gender;
public:
    // 公共的成员函数(接口)
    void set(int n, string p, char g);
    void display();
};

工程化代码示例(头文件分离)

实际开发中,建议将类的声明放在 .h 头文件中,实现放在 .cpp 源文件中,并在主程序中调用。这种分离有助于模块化管理和维护。

Student.h (声明):

#ifndef PROJECT1_STUDENT_H
#define PROJECT1_STUDENT_H
#include <iostream>
#include <string>
using namespace std;

class Student {
private:  // 私有成员:外界无法直接访问
    int num;
    string name;
    char gender;
public:
    // 构造函数
    Student(int n, string nme, char g);
    // 普通成员函数
    void display();
};
#endif //PROJECT1_STUDENT_H

Student.cpp (实现):

#include "Student.h"
#include <iostream>
using namespace std;

// 构造函数实现
Student::Student(int n, string nme, char g) {
    num = n;
    name = nme;
    gender = g;
}

void Student::display() {
    cout << "num: " << num << endl;
    cout << "name: " << name << endl;
    cout << "gender: " << gender << endl;
}

main.cpp (使用):

#include "Student.h"
using namespace std;

int main() {
    Student student1(1, "Little white", 'f');
    student1.display();
    return 0;
}

输出结果:

num: 1
name: Little white
gender: f

类的成员函数访问方式

成员函数根据访问权限修饰符分为 private(私有)、protected(受保护)和 public(公有)。只有 public 部分能被类外部直接调用;private 部分的成员只能通过该类的其他 member function 访问。以下是访问对象的三种常见方法:

第一种:通过对象名和成员运算符(.)访问

这是最基础的方式。创建一个对象实例,直接使用点操作符调用公共方法。

class Time {
private:
    int hour, minute, second;
public:
    void set_time(int h, int m, int s);
    void show_time();
};

int main() {
    Time timeObj;
    timeObj.set_time(6, 6, 6); 
    timeObj.show_time(); // 输出: 6:6:6
}

第二种:通过指向对象的指针访问(-> 或 (*).)

当需要动态分配内存或传递参数时使用指针。使用箭头 -> 可以直接解引用并调用成员。

int main() {
    Time timeObj;
    timeObj.set_time(6, 6, 6);

    Time *ptr = &timeObj;  // 获取对象地址
    ptr->show_time();      // 推荐使用指针调用
    (*ptr).show_time();    // 等效写法
}

第三种:通过对象的引用变量访问(&)

引用作为已有变量的别名,它们共享同一段存储单元。使用引用的语法比指针更简洁安全。

int main() {
    Time t1;
    t1.set_time(6, 6, 6);

    Time &t2 = t1;   // 引用绑定
    t2.show_time();  // 效果等同于操作 t1
    return 0;
}

Inline 成员函数优化

对于规模极小且使用频繁的函数(如简单的 Getter/Setter),可以使用 inline 关键字建议编译器将其替换为内联代码,从而节省函数调用的开销。但需注意,如果函数体包含复杂的循环或分支,编译器通常会忽略 inline 建议。

#include <iostream>
using namespace std;

// 声明为内联函数
inline int maxVal(int a, int b, int c) {
    a = b > a ? b : a;
    a = c > a ? c : a;
    return a;
}

int main() {
    int m = maxVal(10, 20, 40);
    cout << "max= " << m << endl;
    return 0;
}

以上就是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 算法库。