亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制

什么是类?

C++ 类是用户自定义数据类型,将数据及操作该数据的函数打包为单一实体。可视为蓝图:定义从它创建的对象的结构与行为。

正如房屋蓝图规定门窗房间布局,类描述其数据成员布局及操作它们的函数。同一蓝图可建造多栋房屋(对象)。

C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制

上图中,单一原型生成两个功能不同的房屋。

本教程你将学到:

类声明

声明类很简单:用 class 关键字加类名,花括号包裹主体。

语法

class className { // data members // member functions }; 

访问修饰符:private 与 public

访问修饰符控制类成员可见性。

创建对象(实例化)

对象是类的实例。声明对象模式同变量:className objectName;

语法

className objectName; 

实例化为对象分配内存并可能触发构造函数。

访问数据成员

公有数据成员用点运算符(.)访问。

示例

#include <iostream> using namespace std; class Phone { public: double cost; int slots; }; int main() { Phone Y6; Phone Y7; Y6.cost = 100.0; Y6.slots = 2; Y7.cost = 200.0; Y7.slots = 2; cout << "Cost of Huawei Y6 : " << Y6.cost << endl; cout << "Cost of Huawei Y7 : " << Y7.cost << endl; cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl; cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl; return 0; } 

输出:

C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制

为什么使用 Getter/Setter?

直接访问或修改数据会破坏封装。使用 getter 和 setter 成员函数提供受控访问。

封装示例

#include <iostream> using namespace std; class ClassA { public: void setA(int val); int getA() const; private: int a; }; int ClassA::getA() const { return a; } void ClassA::setA(int val) { a = val; } int main() { ClassA obj; obj.setA(20); cout << "Value of a is: " << obj.getA(); return 0; } 

输出:

C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制

受保护成员与继承

受保护成员在类内及派生类中可访问,支持受控继承。

示例

#include <iostream> using namespace std; class ParentClass { protected: int value; }; class ChildClass : public ParentClass { public: void setId(int x) { value = x; } void displayValue() { cout << "Value is: " << value << endl; } }; int main() { ChildClass c; c.setId(21); c.displayValue(); return 0; } 

输出:

C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制

成员函数:类内定义 vs 类外定义

成员函数可内联定义于类内,或在类内声明、类外用作用域解析运算符 :: 定义。

示例

#include <iostream> #include <string> using namespace std; class Guru99 { public: string tutorial_name; int id; void printName(); void printId() { cout << "Tutorial id is: " << id; } }; void Guru99::printName() { cout << "Tutorial name is: " << tutorial_name; } int main() { Guru99 guru; guru.tutorial_name = 'C++'; guru.id = 1001; guru.printName(); cout << endl; guru.printId(); return 0; } 

输出:

C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制

构造函数与析构函数

构造函数在对象创建时初始化,析构函数在对象销毁前清理。

示例

#include <iostream> using namespace std; class ClassA { public: ClassA() { cout << "Class constructor called" << endl; } ~ClassA() { cout << "Class destructor called" << endl; } }; int main() { ClassA a; // 构造函数调用 int p = 1; if (p) { ClassA b; // 构造函数调用,块结束时析构 } // 此处析构 'a' return 0; } 

输出:

C++ 类与对象实战指南:封装、构造函数、析构函数与访问控制

核心要点

C语言

  1. C# 类与对象:面向对象编程的基石
  2. C++类与对象:面向对象编程实战指南
  3. C++ 友元函数与友元类:突破访问控制的利器
  4. C++ 类模板实战指南:编写灵活的类型无关代码
  5. C++ 运算符全解析:类型、示例与示例程序
  6. 掌握 C++ switch-case:语法、用法与实战示例
  7. C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
  8. C++ 结构体详解:定义、初始化、指针、函数参数与局限性
  9. 掌握 C++ std::list:语法、函数与实战示例
  10. C++ Struct 与 Class 核心差异、语法及最佳实践
  11. C# 抽象类实战教程:从定义到派生的完整代码示例
  12. 精通 Java:理解对象、类与核心 OOP 概念