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

C++面向对象编程:类与对象详解

C++面向对象编程:类与对象详解

引言

面向对象编程(OOP)是现代编程的核心范式之一,它通过"对象"的概念来组织代码和数据。在C++中,类和对象是实现OOP的基础构建块。本文将全面讲解C++中类与对象的概念、语法和实际应用,帮助您建立坚实的面向对象编程基础。

从结构体到类

在C++中,类可以看作是结构体的扩展。两者关键区别在于默认访问权限:

// 结构体示例
struct Student {std::string name;  // 默认publicint age;float gpa;
};// 类示例
class Student {std::string name;  // 默认privateint age;float gpa;
};

类的基本概念

类的定义

class Rectangle {
private:double width, height;  // 私有成员public:// 构造函数Rectangle(double w, double h) : width(w), height(h) {}// 成员函数double area() const {return width * height;}// 访问器double getWidth() const { return width; }void setWidth(double w) { if(w > 0) width = w; }
};

访问修饰符

  • private: 仅类内可访问
  • protected: 类内和派生类可访问
  • public: 完全公开访问

对象的创建与使用

Rectangle rect(5.0, 3.0);  // 栈上创建
double a = rect.area();    // 调用成员函数// 动态创建
Rectangle* pRect = new Rectangle(4.0, 2.0);
delete pRect;  // 记得释放内存

类成员详解

成员变量

class Counter {
private:int count;            // 实例变量static int total;     // 静态变量const int MAX = 100;  // const成员public:Counter() : count(0) { total++; }
};int Counter::total = 0;  // 静态成员初始化

成员函数

class Circle {
private:double radius;public:// 类内定义double area() const { return 3.14159 * radius * radius; }// 类外定义void setRadius(double r);
};void Circle::setRadius(double r) {radius = r;
}

特殊成员函数

class Person {
private:std::string name;int age;public:// 构造函数Person(const std::string& n, int a) : name(n), age(a) {}// 析构函数~Person() { /* 清理资源 */ }// 拷贝构造函数Person(const Person& other) : name(other.name), age(other.age) {}
};

类的关系

组合关系

class Engine {
public:void start() { /*...*/ }
};class Car {
private:Engine engine;  // 组合
};

关联关系

class Student;class Course {
private:std::vector<Student*> students;  // 关联
};

银行账户系统示例

class BankAccount {
private:std::string accountNumber;double balance;std::vector<Transaction> history;  // 组合public:BankAccount(const std::string& accNum) : accountNumber(accNum), balance(0) {}void deposit(double amount) {balance += amount;recordTransaction("Deposit", amount);}// 其他成员函数...
};

最佳实践

  1. 封装原则:隐藏实现细节,提供清晰接口
  2. 合理初始化:使用初始化列表,确保所有成员初始化
  3. const正确性:适当使用const修饰符
  4. 避免过大类:遵循单一职责原则
  5. 谨慎使用友元:仅在必要时破坏封装

总结

类和对象是C++面向对象编程的基础,提供了封装、代码重用和模块化等优势。掌握这些概念对于编写可维护的C++代码至关重要。下一篇文章将深入探讨继承和多态性,进一步扩展面向对象编程的能力。

http://www.lqws.cn/news/68149.html

相关文章:

  • 【AI智能体】Spring AI MCP 从使用到操作实战详解
  • Caliper压力测试
  • 使用new操作符动态分配
  • 有公网ip但外网访问不到怎么办?内网IP端口映射公网连接常见问题和原因
  • JDK21深度解密 Day 11:云原生环境中的JDK21应用
  • JVM——从JIT到AOT:JVM编译器的云原生演进之路
  • 常见算法题目5 -常见的排序算法
  • LabVIEW准分子激光器智能控制系统
  • 【Pytorch学习笔记】模型模块07——hook实现Grad-CAM
  • 数据库系统概论(十四)详细讲解SQL中空值的处理
  • Spring框架学习day6--事务管理
  • 《人性的弱点》能带给我们什么?
  • IoTGateway项目生成Api并通过swagger和Postman调用
  • [免费]微信小程序网上花店系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 提升嵌入式软件调试效率的核心方
  • 内存管理--《Hello C++ Wrold!》(8)--(C/C++)--深入剖析new和delete的使用和底层实现
  • 【Linux】网络--网络层--IP协议
  • PyTorch——卷积层(3)
  • CppCon 2014 学习:0xBADC0DE
  • CSS之动画(奔跑的熊、两面反转盒子、3D导航栏、旋转木马)
  • 小目标检测:YOLOV7改进之双坐标注意力(DCA)
  • TDengine 高级功能——读缓存
  • 汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战
  • 机器人自动火焰切割H型钢的系统设计与应用
  • 机器人夹爪的选型与ROS通讯——机器人抓取系统基础系列(六)
  • 【Redis】Set 集合
  • 【基于阿里云搭建数据仓库(离线)】IDEA导出Jar包(包括第三方依赖)
  • 微型导轨在手术机器人领域中有哪些关键操作?
  • 【Linux】线程控制
  • java 多线程