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

【C++ 】第二章——类(Class)学习笔记

1. 什么是类(Class)

类是 C++ 的核心特性,用来描述具有相同属性和行为的一组对象。类是“模板”,对象是“实例”。

class 类名 {// 成员变量(属性)// 成员函数(行为)
};

2. 类的定义与使用

📌 定义一个类

class Person {
public:std::string name;int age;void sayHello() {std::cout << "Hello, I am " << name << std::endl;}
};

📌 使用类创建对象

int main() {Person p;p.name = "Tom";p.age = 20;p.sayHello();  // 输出:Hello, I am Tomreturn 0;
}

3. 访问控制关键字

关键字说明
public公有,任何地方都能访问
private私有,仅类内部可访问
protected受保护,继承时相关
class Test {
public:int x;         // 公有成员
private:int y;         // 私有成员
};

4. 构造函数与析构函数

🔹 构造函数:创建对象时自动调用

同类名,可重载无返回值

🔹 析构函数:对象销毁时自动调用

函数名前加 ~不能重载无参数

class Animal {
public:Animal() { std::cout << "构造函数执行\n"; }~Animal() { std::cout << "析构函数执行\n"; }
};

5. this 指针

  • 指向调用成员函数的当前对象
  • 常用于成员赋值、链式调用
class Box {int width;
public:Box(int width) {this->width = width;}
};

6. 成员函数在类外定义(使用作用域符号 ::

class Car {
public:void start();
};void Car::start() {std::cout << "Car started" << std::endl;
}

7. 成员初始化列表

构造函数中推荐用初始化列表设置成员变量(尤其是const或引用)。

class Point {int x, y;
public:Point(int a, int b) : x(a), y(b) {}
};

8. 静态成员变量与函数(static)

  • 所有对象共享一个变量
  • 静态函数只能访问静态成员
class Counter {
public:static int count;Counter() { count++; }static void printCount() {std::cout << "Count = " << count << std::endl;}
};
int Counter::count = 0;  // 静态变量初始化

9. 对象的组合(类中包含类)

class Engine {
public:void run() { std::cout << "Engine running\n"; }
};class Car {Engine e;
public:void drive() {e.run();std::cout << "Car driving\n";}
};

10. 类的继承(Inheritance)

子类继承父类的属性和方法。

class Animal {
public:void eat() { std::cout << "Eating\n"; }
};class Dog : public Animal {
public:void bark() { std::cout << "Barking\n"; }
};

📝 注意继承方式:

继承方式公有成员保护成员私有成员
public保持原样保持保护不可访问
protected变保护保持保护不可访问
private变私有变私有不可访问

11. 多态(Polymorphism)

🔹 虚函数实现运行时多态:

class Base {
public:virtual void speak() {std::cout << "Base speak\n";}
};class Child : public Base {
public:void speak() override {std::cout << "Child speak\n";}
};

🔹 使用指针调用

Base* b = new Child();
b->speak();  // 输出 Child speak(虚函数决定调用子类)

12. const 成员函数

在函数声明末尾加 const 表示函数不会修改成员变量。

class Student {int id;
public:int getId() const {return id;  // 不能修改成员变量}
};

13. 内联函数(inline)

小函数可加 inline 提高效率(建议只用于简单函数)。

class Math {
public:inline int square(int x) {return x * x;}
};

14. 类的分离式编写(.h + .cpp)

📁 Person.h

#pragma once
class Person {
public:Person(const char* n);void sayHello();
private:const char* name;
};

📁 Person.cpp

#include "Person.h"
#include <iostream>Person::Person(const char* n) : name(n) {}
void Person::sayHello() {std::cout << "Hello, I am " << name << std::endl;
}

📁 main.cpp

#include "Person.h"
int main() {Person p("Alice");p.sayHello();return 0;
}

15. 总结:C++ 类编写常见套路

✅ 成员变量私有化,公有函数访问
✅ 构造+析构函数成对定义
✅ 使用初始化列表设置成员变量
✅ 建议将类定义分离为 .h.cpp
✅ 使用 const、inline、static 提高安全性与效率
✅ 利用继承和虚函数实现代码复用与多态

http://www.dtcms.com/a/270868.html

相关文章:

  • SpringGateway网关增加https证书验证
  • 基于YOLO的足球检测Web应用:从训练到部署的完整实战
  • 《心灵沟通小平台,创新发展大未来》
  • brainstorm MEG处理流程
  • 2024 睿抗编程技能赛——省赛真题解析(含C++源码)
  • 图像匹配方向最新论文--CoMatch: Covisibility-Aware Transformer for Subpixel Matching
  • 【QT】文件、多线程、网络相关内容
  • 【基础算法】贪心 (四) :区间问题
  • spring-data-jpa + Alibaba Druid多数据源案例
  • (5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
  • OpenCV图片操作100例:从入门到精通指南(4)
  • [C#/.NET] 内网开发中如何使用 System.Text.Json 实现 JSON 解析(无需 NuGet)
  • 树莓派vsftpd文件传输服务器的配置方法
  • Java 大视界 -- 基于 Java 的大数据分布式计算在生物信息学蛋白质 - 蛋白质相互作用预测中的应用(340)
  • 【算法深练】DFS题型拆解:沿着路径“深挖到底”、递归深入、回溯回探的算法解题思路
  • 【数据分析】多数据集网络分析:探索健康与退休研究中的变量关系
  • ESOP系统电子作业指导汽车零部件车间的数字化革命
  • 玛哈特网板矫平机:精密矫平金属开平板的利器
  • 钉钉企业应用开发技巧:查询表单实例数据新版SDK指南
  • 2023年华为杯研究生数学建模竞赛A题WLAN组网分析
  • 结构体指针:使用结构体指针访问和修改结构体成员。
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_ecn_fallback
  • softmax
  • GitHub 趋势日报 (2025年07月08日)
  • SQLZoo 练习与测试答案汇总(复杂题有最优解与其他解法分析、解题技巧)
  • 分类预测 | Matlab基于KPCA-ISSA-SVM和ISSA-SVM和SSA-SVM和SVM多模型分类预测对比
  • 打造自己的组件库(二)CSS工程化方案
  • Tensorflow的安装记录
  • 一天一道Sql题(day04)
  • 开源链动2+1模式与AI智能名片融合下的S2B2C商城小程序源码:重构大零售时代新生态