C++类与对象进阶核心技巧

好的,以下是一份关于C++类与对象的进阶笔记:


一、构造函数进阶

1. 初始化列表
  • 用于高效初始化成员变量,特别是const成员和引用成员。
  • 语法:ClassName::ClassName(args) : member1(value1), member2(value2) {...}
cpp 复制代码
class Point {
public:
    Point(int x, int y) : x_(x), y_(y) {} // 直接初始化
private:
    int x_;
    int y_;
};
2. 委托构造函数
  • 一个构造函数调用同一类的其他构造函数。
cpp 复制代码
class Box {
public:
    Box() : Box(0, 0, 0) {} // 委托给三参数构造函数
    Box(int l, int w, int h) : length(l), width(w), height(h) {}
private:
    int length, width, height;
};

二、static成员

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

三、友元(friend

1. 友元函数
  • 非成员函数可访问类的私有成员。
cpp 复制代码
class Rectangle {
private:
    int width, height;
    friend void printArea(const Rectangle& r); // 声明友元
};
void printArea(const Rectangle& r) {
    std::cout << r.width * r.height; // 直接访问私有成员
}
2. 友元类
  • 整个类可访问当前类的私有成员。
cpp 复制代码
class A {
    friend class B; // B是A的友元类
private:
    int secret;
};
class B {
public:
    void showSecret(A& a) { std::cout << a.secret; }
};

四、运算符重载

1. 基本语法
  • 通过成员函数或全局函数重载运算符。
cpp 复制代码
class Vector {
public:
    Vector operator+(const Vector& other) { // 成员函数重载+
        return Vector(x + other.x, y + other.y);
    }
private:
    int x, y;
};
2. 输入/输出运算符重载
cpp 复制代码
friend std::ostream& operator<<(std::ostream& os, const Vector& v) {
    os << "(" << v.x << ", " << v.y << ")";
    return os;
}

五、继承与多态

1. 虚函数与多态
  • 虚函数实现运行时多态。
cpp 复制代码
class Shape {
public:
    virtual double area() const = 0; // 纯虚函数
};
class Circle : public Shape {
public:
    double area() const override { return 3.14 * radius * radius; }
};
2. 虚函数表(vtable)
  • 编译器为含虚函数的类生成虚函数表,存储函数指针。
  • 对象通过虚指针(vptr)访问vtable

六、深拷贝与浅拷贝

1. 拷贝构造函数
  • 默认浅拷贝可能引发资源重复释放。
  • 需自定义深拷贝:
cpp 复制代码
class String {
public:
    String(const String& other) {
        data = new char[strlen(other.data) + 1];
        strcpy(data, other.data);
    }
private:
    char* data;
};

七、const成员函数

  • 保证函数不修改对象状态。
cpp 复制代码
class Student {
public:
    int getScore() const { return score; } // 不会修改成员
private:
    int score;
};

八、移动语义(C++11)

1. 右值引用
  • 语法:T&&,用于绑定临时对象。
cpp 复制代码
void func(std::string&& s) { // s是右值引用
    std::string data = std::move(s); // 转移资源
}
2. 移动构造函数
  • 高效转移资源,避免深拷贝。
cpp 复制代码
class Buffer {
public:
    Buffer(Buffer&& other) : ptr(other.ptr) { 
        other.ptr = nullptr; // 置空原指针
    }
private:
    int* ptr;
};

这份笔记涵盖了类与对象的核心进阶知识,建议结合代码实践加深理解。

相关推荐
m0_6294947310 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
壹号用户10 小时前
用队列实现栈
数据结构·算法
做人求其滴11 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
daad77711 小时前
记一组无人机IMU传感器数据
算法
计算机安禾11 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
小O的算法实验室11 小时前
2026年KBS,流形感知强化学习差分进化算法+不规则3D无人机路径规划,深度解析+性能实测
算法·智能算法·智能算法改进
玖釉-11 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
不做无法实现的梦~11 小时前
运动控制系统复习一览-----常考题目总结版本
算法
小短腿的代码世界11 小时前
信号路由风暴:Qt算法交易系统的高频信号分发架构
qt·算法·架构
阿文的代码库11 小时前
一文读懂GROUP BY 1,2 VS GROUP BY column_1, column_2 的区别
算法