c++学习

devtools/2024/11/12 20:34:40/

关键字

continue

continue 关键字用于控制循环语句的执行流程。当continue 语句被执行时,它会跳过当前循环迭代中剩余的代码,并立即开始下一次迭代。continue 通常用于 forwhiledo-while 循环中。

#include <iostream>
using namespace std;int main() {for (int i = 0; i < 10; i++) {if (i % 2 == 0) {continue;  // 跳过本次循环剩余的代码,继续下一次循环}cout << i << " ";}return 0;
}
在这个例子中,continue 语句会使程序跳过 i 为偶数的情况,因此只会打印奇数:1 3 5 7 9。

static

static 关键字在C++中有多种用途,分别可以应用于变量、函数和成员变量或成员函数。 

1.静态局部变量 :静态局部变量是在函数内部定义的,但它们的生命周期跨越整个程序的运行时间。它们在第一次执行时初始化,并且其值在函数调用之间保持不变。

#include <iostream>
void demo() {static int count = 0;  // 静态局部变量count++;std::cout << "Count: " << count << std::endl;
}int main() {demo();  // 输出: Count: 1demo();  // 输出: Count: 2demo();  // 输出: Count: 3return 0;
}

 2.静态全局变量:在文件作用域内,静态全局变量的作用域限制在定义它的文件内,其他文件不能访问它。这在多文件项目中非常有用,因为它避免了命名冲突。

// File1.cpp
static int globalVar = 10;  // 静态全局变量void printVar() {std::cout << globalVar << std::endl;
}// File2.cpp
extern void printVar();int main() {printVar();  // 输出: 10return 0;
}

3. 静态成员变量:静态成员函数只能访问静态成员变量和静态成员函数。它们不依赖于类的实例,可以直接通过类名调用。

#include <iostream>class MyClass {
public:static void staticFunc() {std::cout << "This is a static function." << std::endl;}
};int main() {MyClass::staticFunc();  // 通过类名调用静态成员函数return 0;
}

 静态成员函数:静态成员函数只能访问静态成员变量和静态成员函数。它们不依赖于类的实例,可以直接通过类名调用。

#include <iostream>class MyClass {
public:static void staticFunc() {std::cout << "This is a static function." << std::endl;}
};int main() {MyClass::staticFunc();  // 通过类名调用静态成员函数return 0;
}

静态变量在命名空间:在命名空间内声明静态变量也会使其仅在该编译单元中可见。

namespace MyNamespace {static int namespaceVar = 42;
}int main() {std::cout << MyNamespace::namespaceVar << std::endl;  // 输出: 42return 0;
}

虚函数

虚函数(Virtual Function)是面向对象编程中的一个概念,主要用于实现多态性(polymorphism)。它是基类(父类)中的一个函数,可以被子类(派生类)重写(override)。当使用基类的指针或引用来调用虚函数时,实际调用的是子类中重写的版本,而不是基类中的版本。这个过程称为动态绑定(dynamic binding)或后期绑定(late binding)。

虚函数特点:

  • 定义:在基类中用 virtual 关键字修饰的函数就是虚函数。

  • 重写:子类可以选择性地重写基类中的虚函数,即子类可以提供自己版本的函数实现。

  • 动态绑定:通过基类的指针或引用调用虚函数时,实际调用的是指向对象的实际类型(运行时的类型)中的函数,而不是编译时类型的函数。

  • 虚函数表:编译器为每个定义了虚函数的类维护一个虚函数表(V-Table),这个表中存储了虚函数的地址。当通过基类指针或引用调用虚函数时,程序会根据虚函数表找到实际要调用的函数地址。

虚函数使用背景

虚函数的主要作用是通过基类接口实现多态。假设你有一个基类 Animal,以及从它派生的 DogCat 类。你可以在 Animal 中定义一个虚函数 speak(),然后在 DogCat 中重写这个函数

class Animal {
public:virtual void speak() {std::cout << "Animal speaks" << std::endl;}
};class Dog : public Animal {
public:void speak() override {std::cout << "Woof!" << std::endl;}
};class Cat : public Animal {
public:void speak() override {std::cout << "Meow!" << std::endl;}
};
#现在,假设你有一个 Animal 类型的指针,指向 Dog 对象:
Animal* animal = new Dog();
animal->speak();
#在这里,尽管 animal 是 Animal 类型的指针,但由于 speak() 是虚函数,实际调用的是 Dog 类中重写的 speak() 方法。因此,输出结果将是 Woof! 而不是 Animal speaks。

 全局变量

 全局变量通常在文件的开头(在任何函数或类定义的外面)定义

#include <iostream>int globalVar = 10;  // 定义一个全局变量int main() {std::cout << "Global variable: " << globalVar << std::endl;return 0;
}
#在这个例子中,globalVar 是一个全局变量,它可以在 main() 函数中访问。

全局变量的特点 

 

  • 作用域

    • 全局变量的作用域是从定义点到程序结束。它可以在定义之后的任何函数或代码块中被访问。
  • 生命周期

    • 全局变量的生命周期从程序开始到程序结束。因此,它们在整个程序的执行过程中始终存在。
  • 初始值

    • 全局变量如果未显式初始化,默认会被初始化为0(对于整数类型)、0.0(对于浮点类型)或空指针(对于指针类型)。
  • 多文件中的全局变量

    • 如果在多文件中使用全局变量,可能会遇到重定义问题。为了避免这种问题,可以使用 extern 关键字声明全局变量,这样在其他文件中可以引用同一个全局变量。

http://www.ppmy.cn/devtools/94189.html

相关文章

自学网络安全的三个必经阶段(含路线图)

在当今数字化时代&#xff0c;网络安全已成为至关重要的领域。越来越多的人对网络安全产生了浓厚的兴趣&#xff0c;并选择自学这一富有挑战性和前景的技能。本文将详细介绍自学网络安全的三个必经阶段&#xff0c;并为您提供清晰的学习路线图&#xff0c;帮助您在自学之路上稳…

【数据结构和算法】时间复杂度和空间复杂度

时间复杂度 时间复杂度是算法效率的一个重要指标&#xff0c;它描述了算法运行时间与输入数据量之间的关系&#xff0c;给出了算法运行时间的上界估计。 时间复杂度主要关注算法中基本操作的执行次数&#xff0c;特别是当输入规模&#xff08;通常用n表示&#xff09;增大时&…

静态类+单例模式

静态类 静态类的定义 在声明类的时候加上static修饰的类为静态类。 1.静态类只允许有静态成员&#xff08;静态方法&#xff0c;静态字段&#xff0c;静态属性&#xff09;。 2.静态类不能实例化。 3.静态类中的方法是通过类名来调用。 静态类使用事项 静态类在项目中&a…

浙大数据结构慕课课后题(06-图1 列出连通集)

题目要求&#xff1a; 给定一个有n个顶点和m条边的无向图&#xff0c;请用深度优先遍历&#xff08;DFS&#xff09;和广度优先遍历&#xff08;BFS&#xff09;分别列出其所有的连通集。假设顶点从 0 到n-1编号。进行搜索时&#xff0c;假设我们总是从编号最小的顶点出发&…

【产品经理】竞品分析怎么理解?拆解一下

什么叫竞品&#xff1f;&#xff08;研究的对象&#xff09; 竞品看你怎么理解&#xff0c;有时候不一定是你的竞争对手&#xff0c;有可能是其他行业也做了这个功能&#xff0c;那你也可以学习&#xff0c;有类似的功能或者策略都可以学习&#xff0c;不过这个可能在管理学上…

Tomcat文章目录

这是一个Tomcat相关文章的目录&#xff0c;汇总了我写过的Tomcat的所有文章&#xff0c;方便进行查找回顾 第一章&#xff1a;实现一个简单的Web容器 使用Socket编程实现一个简单的服务端程序&#xff0c;但是仅仅支持静态资源&#xff08;html&#xff09;的获取。 第二章&…

2024 年 7 月公链行业研报:市场波动中 Solana 表现抢眼,Layer 2 竞争白热化

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 公链 Research 页面 7 月份&#xff0c;加密货币市场表现活跃&#xff0c;波动幅度较大&#xff0c;这一现象映射了全球金融市场的整体趋势。现货以太坊 ETP 在美国的上市&…

proxy负载均衡

endpoint &#xff1a; 终点、终端 看service服务器的ip kubectl get ep backend -> real server &#xff1a;真正提供web服务的服务器 负载均衡器 load balancer --》LB USER -->LB --->BACKEND(real server) nginx SERVICE --->很多的endpoint--》po…