news 2026/3/1 5:17:14

C++面向对象进阶精要

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++面向对象进阶精要

好的,这是关于 C++ 类与对象的进阶笔记:


C++ 类与对象进阶笔记

1. 构造函数与析构函数
  • 构造函数:在创建对象时自动调用,用于初始化对象成员。
    • 默认构造函数:无参或所有参数都有默认值的构造函数。
    • 拷贝构造函数:用同类型对象初始化新对象,形式为类名(const 类名& obj)
    • 初始化列表:高效初始化成员变量,语法:
      class MyClass { public: MyClass(int a, double b) : x(a), y(b) {} private: int x; double y; };
  • 析构函数:对象销毁时自动调用,用于释放资源(如内存、文件句柄),形式为~类名()

2. 静态成员
  • 静态成员变量:属于类而非对象,所有对象共享同一份数据,需在类外初始化:
    class Counter { public: static int count; // 声明 }; int Counter::count = 0; // 初始化
  • 静态成员函数:只能访问静态成员,无this指针:
    class Math { public: static double square(double x) { return x * x; } };

3. 友元
  • 友元函数:非成员函数可访问类的私有成员:
    class Box { private: double width; public: friend void printWidth(Box box); // 友元声明 }; void printWidth(Box box) { cout << box.width; // 直接访问私有成员 }
  • 友元类:一个类的成员函数可访问另一个类的私有成员:
    class A { friend class B; // B 是 A 的友元类 };

4. 运算符重载
  • 通过成员函数或全局函数重载运算符(如+,==):
    class Vector { public: Vector operator+(const Vector& v) { return Vector(x + v.x, y + v.y); } private: int x, y; };

5. 继承与多态
  • 继承:派生类继承基类成员,语法:
    class Derived : public Base { ... };
  • 虚函数:支持运行时多态,通过virtual声明:
    class Shape { public: virtual void draw() { cout << "Drawing Shape"; } }; class Circle : public Shape { public: void draw() override { cout << "Drawing Circle"; } };

6. 深拷贝与浅拷贝
  • 浅拷贝:默认拷贝构造函数仅复制指针地址(指向同一内存)。
  • 深拷贝:需自定义拷贝构造函数,复制指针指向的内容:
    class String { public: String(const String& s) { data = new char[strlen(s.data) + 1]; strcpy(data, s.data); } private: char* data; };

总结

掌握构造函数/析构函数、静态成员、友元、运算符重载、继承与多态等进阶特性,能更灵活地设计面向对象程序。深拷贝与浅拷贝的区别是资源管理的关键点,需特别注意。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 3:27:26

基于SSM的医药管理系统(11876)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/2/26 19:40:58

C++模板

传统函数重载的问题 假设我们要写一个交换函数&#xff1a; void Swap(int& a, int& b) {int tmp a; a b; b tmp; }void Swap(double& a, double& b) {double tmp a; a b; b tmp; }void Swap(char& a, char& b) {char tmp a; a b; b tmp; }重…

作者头像 李华
网站建设 2026/2/18 6:41:08

架构设计怎么做:一套可复用、可落地的方法论

架构设计的本质不是“画图”&#xff0c;而是在约束条件下&#xff0c;对系统的关键质量属性&#xff08;性能、可用性、安全、可演进性、成本&#xff09;做出一系列可验证的决策&#xff0c;并把这些决策沉淀为团队可执行的方案与规范。下面给出一套工程化流程&#xff0c;你…

作者头像 李华