当前位置: 首页 > news >正文

02 面向对象

C++ 类与对象核心内容总结


一、基本概念

  1. 对象 (Object)
    • 定义:客观存在的实体(如一个人、一辆车)。

    • 组成:

    ◦ 属性(静态特征):通过数据成员描述(如年龄、职称)。

    ◦ 方法(动态行为):通过成员函数实现(如学习、教学)。

    • 特性:

    ◦ 唯一标识(名字)。

    ◦ 属性描述状态,方法定义行为。

    ◦ 封装性:属性和方法作为一个整体,通过操作接口使用。

  2. 类 (Class)
    • 定义:对象的抽象描述,是同类对象的“模板”。

    • 与对象关系:

    ◦ 类是抽象概念(如“教师类”),对象是具体实例(如“教师黎明”)。

    ◦ 实例化:通过类创建对象(类似“类型声明变量”)。


二、类的组成

  1. 成员类型
    • 数据成员:描述对象的属性(如 int age;)。

    • 成员函数:定义对象的行为(如 void Teach();)。

  2. 访问权限
    private(私有):仅类内成员函数可访问(默认权限)。

    public(公有):类内外均可访问。

    protected(保护):类内及派生类可访问。

  3. 类定义示例

    class Teacher {
    private:    // 私有成员(默认)int age;char* degree;
    public:     // 公有成员void Study(); int TellAge() { return age; }  // 内联函数
    protected:  // 保护成员char* title;
    };
    

三、类与结构体的区别

特性类 (class)结构体 (struct)
默认访问权限privatepublic
用途封装数据与操作简单数据集合

四、对象的定义与使用

  1. 对象定义

    Teacher LiMing;         // 局部对象
    Teacher *p = new Teacher; // 动态对象
    
  2. 访问成员
    • 通过对象:LiMing.TellAge();

    • 通过指针:p->Teach();

  3. 对象特性
    • 私有成员需通过公有方法访问(体现封装性):

    LiMing.age = 30;          // 错误!age 是私有成员
    int age = LiMing.TellAge(); // 正确:通过公有方法访问
    

五、成员函数的实现

  1. 类内定义

    class A {
    public:void Set(int a) { x = a; }  // 直接在类内实现
    };
    
  2. 类外定义

    class A {
    public:void Set(int a);  // 声明
    };
    void A::Set(int a) {  // 类外实现,需加类名限定x = a;
    }
    
  3. 函数重载与默认参数

    class Calculator {
    public:int Add(int a, int b);double Add(double a, double b);           // 重载void Set(int a, int b = 0);               // 默认参数
    };
    

六、嵌套类
• 定义:在类内部定义另一个类。

class Outer {
public:class Inner {  // 嵌套类public:void Display();};Inner obj;  // 嵌套类对象作为成员
};

七、关键特性

  1. 封装性
    • 数据与操作绑定,隐藏实现细节。

    • 通过访问控制(private/public)保护数据。

  2. 对象赋值
    • 同类型对象可直接整体赋值(包括私有成员):

    Teacher t1, t2;
    t2 = t1;  // 成员间逐值复制
    
  3. 动态内存与指针
    • 动态对象需手动管理内存:

    Teacher *p = new Teacher();
    delete p;  // 释放内存
    

八、应用示例

class Student {
private:char name[20];float math, chinese;
public:void SetName(char* n) { strcpy(name, n); }void SetScores(float m, float c) { math = m; chinese = c; }float Average() { return (math + chinese) / 2; }
};int main() {Student stu;stu.SetName("Alice");stu.SetScores(90, 85);cout << "Average: " << stu.Average();  // 输出 87.5return 0;
}

九、总结
• 类是对象的蓝图,定义数据与操作的封装。

• 对象是类的实例,通过成员函数操作私有数据。

• 访问控制(private/public/protected)实现封装与保护。

• 面向对象的核心是通过类与对象组织代码,提高复用性与安全性。

相关文章:

  • 游戏盾与高防CDN的协同防御策略分析
  • 网络准入控制系统推荐:2025年构建企业网络安全的第一道防线
  • 【深度学习】#10 注意力机制
  • MQ-2烟雾传感器
  • 基于 BERT 微调一个意图识别(Intent Classification)模型
  • 在前端应用领域驱动设计(DDD):必要性、挑战与实践指南
  • 2025三掌柜赠书活动第十五期:高并发系统:设计原理与实践
  • GRPO有什么缺点,如何改进?
  • leetcode 2302. 统计得分小于 K 的子数组数目 困难
  • 工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能
  • 可调用对象(2)-仿函数
  • 【漫话机器学习系列】229.特征缩放对梯度下降的影响(The Effect Of Feature Scaling Gradient Descent)
  • 【氮化镓】质子辐照对 GaN-on-GaN PiN 二极管电导调制的影响
  • 专业测量中的示波器噪声抑制技巧
  • Docker镜像技术深度解析
  • 如何从大规模点集中筛选出距离不小于指定值的点
  • 如何理解promise 续二
  • Transformer数学推导——Q28 分析图注意力(Graph Attention)的邻接矩阵与注意力权重的等价条件
  • 在移动应用开发中,如何优化JavaScript的性能
  • [JavaScript]对象关联风格与行为委托模式
  • 纪念|海上金石学的兴盛与王昶《金石萃编》
  • 新剧|反谍大剧《绝密较量》央一开播,张鲁一高圆圆主演
  • 滨江集团去年营收约691亿元,尚未结算的预收房款1253亿元
  • 俄罗斯称已收复库尔斯克州,普京发表讲话
  • 涉李小龙形象商标被判定无效,真功夫:暂无更换计划
  • 偷拍拷贝某轨道车技术信息后撰写论文发表,工程师被判一年有期徒刑