------------类的定义---------------

什么是类?

类(Class) :是对具有相同 属性(数据)方法(行为)的一组对象的抽象描述

  • 类是 C++ 的核心特性之一,用于实现 面向对象编程(OOP)中的封装
  • 类是对象的蓝图,定义了对象的 属性(数据成员)行为(成员函数)

一个形象的例子:比如 “人类”,可以有姓名、年龄等属性,以及说话、行走等行为,在编程里就可据此定义一个 “人类” 的类。

怎么定义类?

代码语言:javascript

AI代码解释

class Person
{
public:
    void setAge(int a)
    {
        age = a;
    }
    int getAge()
    {
        return age;
    }
private:
    
};

C++使用 class关键字 定义,类中包含以下三部分的内容。 类的基本结构:关键的三个组成部分

  • 数据成员(属性):类的变量(int age;
  • 成员函数(方法):类的函数(void setAge(int a) 和 int getAge()
  • 访问修饰符
    • public:任何地方可访问
    • protected:类及其子类可访问
    • private:仅类内部访问(默认)
关于类需要注意什么?

下面博主挑选了四个关于“类”需要注意的事项,它们分别是关于:

  1. 类定义的语法规范
  2. 成员变量的命名约定
  3. structclass 的区别
  4. 类内定义的成员函数与内联

1. 类定义的语法规范

分号结尾:类定义结束时必须使用分号 ;,这是 C++ 语法的强制要求。

代码语言:javascript

AI代码解释

class MyClass // 类定义开始
{  
        
    // 成员...
        
};  // 分号不可省略!

2. 成员变量的命名约定

命名前缀 / 后缀:为避免成员变量与局部变量或函数参数重名,通常添加特殊标识:

代码语言:javascript

AI代码解释

class Person 
{
private:
    int m_age;          // m_前缀(Microsoft风格)
    std::string _name;  // 前缀(常见于开源项目)
    double salary_;     // 后缀(Google风格)
};

注意:C++ 标准并未强制要求此规则,具体风格需遵循团队或项目规范。

3. structclass 的区别

特性

struct

class

默认访问权限

public

private

设计哲学

数据聚合(POD, Plain Old Data)

封装复杂逻辑(OOP)

常见用途

轻量级数据容器、C 兼容结构

封装、继承、多态

示例对比

代码语言:javascript

AI代码解释

struct Point 
{  
    
    int x, y; // 默认public
    void move(int dx, int dy);  //注意:可定义函数
};
    
class Rectangle 
{  
    int width, height; // 默认private
public:
    int area() const 
    { 
        return width * height; 
    }
};

4. 类内定义的成员函数与内联

隐式内联:在类内部直接定义的成员函数会被编译器视为 inline 函数(但最终是否内联由编译器决定)

代码语言:javascript

AI代码解释

class Math 
{
public:
    int add(int a, int b) // 隐式内联
    {  
        return a + b;
    }
};

显式内联:若在类外定义函数,需显式使用 inline 关键字(通常在头文件中):

代码语言:javascript

AI代码解释

// Math.h
class Math 
{
public:
    int multiply(int a, int b);  // 声明
};
    
// Math.cpp
inline int Math::multiply(int a, int b) // 显式内联
{  
    return a * b;
}

注意事项

  • 内联函数的定义必须在每个调用它的翻译单元(.cpp 文件)中可见,因此通常直接放在头文件中。
  • 现代编译器会智能优化内联决策,即使未声明 inline,简单函数也可能被自动内联

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐