继承与多态
一、继承机制:代码复用的基石1.1 继承的概念与本质继承是面向对象编程中实现代码复用的核心机制,它允许一个类(派生类)获取另一个类(基类)的成员变量和成员函数。这种关系类似于现实世界中的 "is-a" 关系,例如 "狗是一种动物"。 在 C++ 中,继承通过类定义时的冒号语法实现: 12345678910111213class Animal {public: void speak() { std::cout << "The animal makes a sound." << std::endl; }};class Dog : public Animal {public: void bark() { std::cout << "The dog barks." << std::endl; }}; 在上述示例中,Dog 类继承自...
C++中class与struct的异同点深度解析
一、基础语法差异1.1 访问修饰符差异 class 默认成员访问权限为 private 声明的成员变量与函数仅对类内部可见,需使用 public/protected 显式开放 struct 默认成员访问权限为 public 结构体成员对所有作用域开放,需使用 private/protected 显式限制 12345678910class MyClass { int privateVar; // 默认私有public: void publicFunc() {}};struct MyStruct { int publicVar; // 默认公有 void publicFunc() {}}; 1.2 成员函数特性 class 支持抽象方法(纯虚函数) 通过 = 0 定义的虚函数使类成为抽象类,如 virtual void func() = 0; struct 不支持抽象方法 所有成员函数必须有具体实现,否则会导致编译错误 12...
C++ 析构函数详解:原理、实现
一、析构函数基础概念1.1 析构函数的定义析构函数是 C++ 面向对象编程中用于对象销毁时进行资源清理的特殊成员函数。当对象生命周期结束时,析构函数会被自动调用,负责释放对象所占用的资源。 语法特征: 函数名与类名相同,前面加波浪号~ 没有返回值,也不指定 void 没有参数,因此无法重载 不能被显式调用(编译器自动调用) 123456789101112class MyClass {public: // 构造函数 MyClass() { std::cout << "构造函数被调用" << std::endl; } // 析构函数 ~MyClass() { std::cout << "析构函数被调用" << std::endl; }}; 1.2 析构函数的调用时机析构函数在以下情况会被自动调用: 栈上创建的对象超出其作用域时 堆上创建的对象...
C++ 左值与右值:语义解析与实战应用
一、左值与右值的核心定义在 C++ 中,表达式根据其特性被分为左值(lvalue)和右值(rvalue),这一分类直接影响着变量的存储、引用绑定和资源管理。根据 C++17 标准( IO/IEC 14882:2017),左值是指 "可以取地址且具有身份 (identity) 的表达式",而右值则是 "非左值的表达式",通常是临时的、不具有持久身份的对象。 1.1 左值的核心特征左值具有以下关键特性: 可以通过&运算符获取地址S 具有持久性,在表达式结束后仍然存在 可以出现在赋值运算符的左侧 1234int x = 10; // x是左值int* ptr = &x; // 合法,左值可以取地址x = 20; // 合法,左值可以出现在赋值左侧 1.2 右值的核心特征右值具有以下关键特性: 不能通过&运算符获取地址 临时性,通常在表达式结束后销毁 不能出现在赋值运算符的左侧 1234int y = x + 5; // x + 5是右值// int* ptr = &(x + ...
C++ 变量作用域与存储持续度完全解析
导言:变量类型的四维属性体系在 C++ 中,每个变量都具有四个核心属性,这些属性共同决定了变量的行为特征: 作用域 (Scope):变量在程序中可见的区域 存储持续度 (Storage Duration):变量在内存中存在的时间 链接属性 (Linkage):变量在不同编译单元间的可见性 生命周期 (Lifetime):变量从创建到销毁的时间段 一、作用域类型详解1.1 块作用域 (Block Scope)块作用域是由花括号{}界定的区域,包括函数体、循环体、条件语句体等。 12345678910void function() { int a = 0; // 块作用域开始 if (a == 0) { int b = 1; // 内部块作用域 // a和b在此可见 } // b的作用域结束 // 仅a可见,b不可见} // a的作用域结束 1.2 函数作用域 (Function Scope)仅适用于goto语句的标签,标签在整个函数内可见。 12345678vo...

