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

C++ 之类和对象

类的定义

类是C++中创建对象的蓝图,它封装了数据(成员变量)和行为(成员函数)。

class MyClass {
public:
    // 公有成员
    void publicMethod();

private:
    // 私有成员
    int privateVar;
protected:
    // 保护成员
    int protectedVar;
};

// 类成员的定义
void MyClass::publicMethod() {
    // 方法实现
}
类的声明和定义

类可以被声明为一个接口,然后在另一个地方定义其成员函数。

// MyClass的声明
class MyClass;

// MyClass的定义
class MyClass {
    // 成员变量和成员函数的实现
};
成员变量和成员函数

成员变量是类的一部分,用于存储数据,而成员函数是类的一部分,用于定义操作数据的行为。

class MyClass {
public:
    int publicVar; // 公有成员变量
    void publicMethod(); // 公有成员函数

private:
    int privateVar; // 私有成员变量

    void privateMethod(); // 私有成员函数
};

void MyClass::publicMethod() {
    // 实现
}

void MyClass::privateMethod() {
    // 实现
}
访问控制(public, private, protected)
  • public: 类的成员可以被任何代码访问。
  • private: 类的成员只能被类的成员函数和友元函数访问。
  • protected: 类的成员可以被类的成员函数、友元函数以及子类访问。
对象

对象是类的实例,它是根据类定义创建的。

MyClass obj; // 创建MyClass的一个对象
对象的声明和初始化

对象可以在声明时被初始化。

MyClass obj(10); // 假设有一个接受int参数的构造函数
对象的构造和析构

构造函数用于初始化对象,析构函数用于在对象生命周期结束时进行清理。

class MyClass {
public:
    MyClass(int value) : value_(value) {} // 构造函数
    ~MyClass() { // 析构函数
        // 清理代码
    }
private:
    int value_;
};

MyClass obj(10); // 调用构造函数
// obj生命周期结束时,自动调用析构函数
构造函数和析构函数

构造函数是特殊的成员函数,用于创建对象时初始化成员变量。析构函数用于销毁对象。

对象的拷贝构造函数

拷贝构造函数用于创建一个对象作为另一个对象的副本。

class MyClass {
public:
    MyClass(const MyClass& other) {
        // 拷贝other对象的成员变量
    }
};

MyClass obj1(10);
MyClass obj2 = obj1; // 调用拷贝构造函数
对象的赋值运算符重载

赋值运算符可以被重载,以定义对象赋值时的行为。

class MyClass {
public:
    MyClass& operator=(const MyClass& other) {
        // 赋值操作
        return *this;
    }
};

MyClass obj1(10);
MyClass obj2;
obj2 = obj1; // 调用赋值运算符
静态成员

静态成员属于类本身,而不是类的任何特定对象。

静态成员变量

静态成员变量在程序的整个运行期间只存在一个实例。

class MyClass {
public:
    static int staticVar; // 静态成员变量
};

int MyClass::staticVar = 0; // 定义和初始化
静态成员函数

静态成员函数属于类,不依赖于类的对象。

class MyClass {
public:
    static void staticMethod() {
        // 方法实现
    }
};

MyClass::staticMethod(); // 直接通过类名调用

静态成员通常用于那些不依赖于对象状态的操作和数据。它们可以通过类名直接访问,而不需要创建类的对象。


http://www.kler.cn/a/382081.html

相关文章:

  • Windows安装多个NodeJS版本
  • Anolis8防火墙安全设置
  • 深度学习:从神经网络到人工智能的飞跃
  • [论文][环境]3DGS+Colmap环境搭建_WSL2_Ubuntu22.04 - 副本
  • 【JAVA】java 企业微信信息推送
  • nginx 搭建网站
  • 集智书童 | UniMatch V2 推进半监督语义分割极限,以更低训练成本实现更优的语义分割结果-建议收藏!
  • 【网络】数据链路层
  • 基于Qt的独立线程创建与多线程执行实验Demo
  • JAVA读取doc,docx转PDF通过vue展示
  • 基于Multisim拔河比赛游戏+计分电路(含仿真和报告)
  • 华为 HarmonyOS NEXT 原生应用开发:【封装正则API】在原生鸿蒙中使用正则表达式校验登录注册模块(邮箱、密码、手机号)校验
  • 微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
  • WordPress 中最佳的维护服务:入门级用户指南
  • 【机器学习导引】ch4-决策树
  • copyq禁止访问网络(ubuntu cgroup)
  • 发不了Science?那是因为你不会画Science风格的配图
  • 静态数据区,堆,栈
  • linux动态库与静态库
  • 从底层技术到实际应用:Claude与ChatGPT谁更适合学术写作?
  • Redis学习:BitMap/HyperLogLog/GEO案例 、布隆过滤器BloomFilter、缓存预热+缓存雪崩+缓存击穿+缓存穿透
  • 20241106,LeetCode 每日一题,用 Go 实现整数回文数判断
  • Redis(2):内存模型
  • java:题目:用Java实现简单的自取取款操作
  • Leetcode 第 422 场周赛题解
  • Flutter中有趣的级联语法