梦笔生花伟_社区达人页

凡事预则立,不预则废

暂无精选文章
暂无更多信息

2023年10月

  • 10.10 21:37:26
    发表了文章 2023-10-10 21:37:26

    操作系统的概述

    操作系统(Operating System,简称OS)简单通俗来讲就是一款软件。不过和一般软件不同,操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件。任何其他软件都必须在操作系统的支持下才能运行。 Linux 也是众多操作系统之一,要想知道 Linux 是什么,首先得说一说什么是操作系统。 计算机是一台机器,它按照用户的要求接收信息、存储数据、处理数据,然后再将处理结果输出(文字、图片、音频、视频等)。计算机由硬件和软件组成: 硬件是计算机赖以工作的实体,包括显示器、键盘、鼠标、硬盘、CPU、主板等; 软件会按照用户的要求协调整台计算机的工
  • 10.09 21:34:35
    发表了文章 2023-10-09 21:34:35

    C++移动和获取文件读写指针

    在读写文件时,有时希望直接跳到文件中的某处开始读写,这就需要先将文件的读写指针指向该处,然后再进行读写。 ifstream 类和 fstream 类有 seekg 成员函数,可以设置文件读指针的位置; ofstream 类和 fstream 类有 seekp 成员函数,可以设置文件写指针的位置。 所谓“位置”,就是指距离文件开头有多少个字节。文件开头的位置是 0。 这两个函数的原型如下: ostream & seekp (int offset, int mode); istream & seekg (int offset, int mode); mode 代表文件读写指针的设置模
  • 10.08 22:33:23
    发表了文章 2023-10-08 22:33:23

    C++ 使用getline()从文件中读取一行字符串

    我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时,该方法的功能就变成了从指定文件中读取一行字符串。 该方法有以下 2 种语法格式: istream & getline(char* buf, int bufSize); istream & getline(char* buf, int bufSize, char delim); 其中,第一种语法格式用于从文件输入流

2023年09月

  • 09.28 22:09:38
    发表了文章 2023-09-28 22:09:38

    C++ 采用get()和put()读写文件

    在某些特殊的场景中,我们可能需要逐个读取文件中存储的字符,或者逐个将字符存储到文件中。这种情况下,就可以调用 get() 和 put() 成员方法实现。 C++ ostream::put()成员方法 通过《C++ cout.put()》一节的学习,读者掌握了如何通过执行 cout.put() 方法向屏幕输出单个字符。我们知道,fstream 和 ofstream 类继承自 ostream 类,因此 fstream 和 ofstream 类对象都可以调用 put() 方法。 当 fstream 和 ofstream 文件流对象调用 put() 方法时,该方法的功能就变成了向指定文件中写入单
  • 09.27 22:06:21
    发表了文章 2023-09-27 22:06:21

    C++ 使用getline():从文件中读取一行字符串

    getline() 方法从 cin 输入流缓冲区中读取一行字符串。在此基础上,getline() 方法还适用于读取指定文件中的一行数据,本节就给大家做详细的讲解。 我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时,该方法的功能就变成了从指定文件中读取一行字符串。该方法有以下 2 种语法格式: istream & getline(char* buf, int bufS
  • 09.26 21:28:12
    发表了文章 2023-09-26 21:28:12

    C++ 采用read()和write()读写二进制文件

    以文本形式读写文件和以二进制形式读写文件的区别,并掌握了用重载的 >> 和 << 运算符实现以文本形式读写文件。在此基础上,本节继续讲解如何以二进制形式读写文件。 举个例子,现在要做一个学籍管理程序,其中一个重要的工作就是记录学生的学号、姓名、年龄等信息。这意味着,我们需要用一个类来表示学生,如下所示: class CStudent { char szName[20]; //假设学生姓名不超过19个字符,以 '\0' 结尾 char szId[l0]; //假设学号为9位,以 '\0' 结尾 int age; //年龄
  • 09.25 21:20:02
    发表了文章 2023-09-25 21:20:02

    close()关闭文件方法

    我们知道,调用 open() 方法打开文件,是文件流对象和文件之间建立关联的过程。那么,调用 close() 方法关闭已打开的文件,就可以理解为是切断文件流对象和文件之间的关联。注意,close() 方法的功能仅是切断文件流与文件之间的关联,该文件流并会被销毁,其后续还可用于关联其它的文件。 close() 方法的用法很简单,其语法格式如下: void close( ) 可以看到,该方法既不需要传递任何参数,也没有返回值。 举个例子: #include <fstream> using namespace std; int main() {
  • 09.24 19:54:58
    发表了文章 2023-09-24 19:54:58

    C++读取单个字符操作

    get() 是 istream 类的成员函数,它有多种重载形式,不过本文只介绍最简单最常用的一种: int get(); 此函数从输入流中读入一个字符,返回值就是该字符的 ASCII 码。 如果碰到输入的末尾,则返回值为 EOF。EOF 是 End of File 的缩写。istream 类中从输入流(包括文件)中读取数据的成员函数,在把输入数据都读取完后再进行读取,就会返回 EOF。 EOF 是在 iostream 类中定义的一个整型常量,值为 -1。get() 函数不会跳过空格、制表符、回车等特殊字符,所有的字符都能被读入。例如下面的程序: #include <iostr
  • 09.23 19:26:25
    发表了文章 2023-09-23 19:26:25

    C++ 的cout格式化输出

    在某些实际场景中,我们经常需要按照一定的格式输出数据,比如输出浮点数时保留 2 位小数,再比如以十六进制的形式输出整数,等等。 对于学过 C 语言的读者应该知道,当使用 printf() 函数输出数据时,可以通过设定一些合理的格式控制符,来达到以指定格式输出数据的目的。例如 %.2f 表示输出浮点数时保留 2 位小数,%#X 表示以十六进制、带 0X 前缀的方式输出整数。 关于 printf() 函数支持的格式控制符,更详细的讲解,可阅读《C语言数据输出大汇总》一节,这里不做详细赘述。 C++ 通常使用 cout 输出数据,和 printf() 函数相比,cout 实现格式化输出数据的方
  • 09.22 21:35:34
    发表了文章 2023-09-22 21:35:34

    C++ 的cout.tellp()和cout.seekp()语法介绍

    无论是使用 cout 输出普通数据,用 cout.put() 输出指定字符,还是用 cout.write() 输出指定字符串,数据都会先放到输出流缓冲区,待缓冲区刷新,数据才会输出到指定位置(屏幕或者文件中)。 值得一提的是,当数据暂存于输出流缓冲区中时,我们仍可以对其进行修改。ostream 类中提供有 tellp() 和 seekp() 成员方法,借助它们就可以修改位于输出流缓冲区中的数据。 C++ tellp()成员方法 首先,tellp() 成员方法用于获取当前输出流缓冲区中最后一个字符所在的位置,其语法格式如下: streampos tellp(); 显然,tellp()
  • 09.21 21:55:35
    发表了文章 2023-09-21 21:55:35

    C++输入流和输出流介绍

    C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据; 使用 fscanf()、fgets() 等函数读取文件中的数据,使用 fprintf()、fputs() 等函数向文件中写入数据。 要知道,C 语言的这套 I/O 解决方案也适用于 C++ 程序,但 C++ 并没有“偷懒”,它自己独立开发了一套全新的 I/O 解决方案,其中就包含
  • 09.20 21:46:26
    发表了文章 2023-09-20 21:46:26

    C++中的四种类型转换运算符

    隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。 再者,C风格的强制类型转换统一使用( ),而( )在代码中随处可见,所以也不利于使用文本检索工具(例如 Windows 下的 Ctrl+F、Linux 下的 grep 命令、Mac 下的 Command+F)定位关键代码。为了使潜在风险更加细化,使问题追溯更加方便,使书写格式更加规范,C++ 对类型转换进行了分类,并新增了四个关键字来予以支持,它们分别是: 这四个关键字的语
  • 09.19 21:57:50
    发表了文章 2023-09-19 21:57:50

    C++中的转换构造函数

    在 C/C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。 自动类型转换示例: int a = 6; a = 7.5 + a; 编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换为 double 类型,然后与 7.5 相加,得到和为 13.5。在向整型变量 a 赋值时,将 13.5 转换为整数 13,然后赋给 a。整个过程中,我们并没有告诉编译器如何去做,编译器使用内置的规则完成数据类型的转换。强制类型转换示例: int n = 100
  • 09.18 20:57:04
    发表了文章 2023-09-18 20:57:04

    C++中的深拷贝和浅拷贝介绍

    对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{ public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ } private: int m_a; int m_b; }; int main(){ int a = 10; int b = a; //拷贝 Base obj1(10, 20);
  • 09.17 19:39:33
    发表了文章 2023-09-17 19:39:33

    C++中的 throw详解

    在《C++异常处理》一节中,我们讲到了 C++ 异常处理的流程,具体为: 抛出(Throw)--> 检测(Try) --> 捕获(Catch) 异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。在 C++ 中,我们使用 throw 关键字来显式地抛出异常,它的用法为: throw exceptionData; exceptionData 是“异常数据”的意思,它可以包含任意的信息,完全有程序员决定。exceptionData 可以是 int、float、bool 等基本类型,也可以是指针、数组、字符串、结构体、类等聚合类型,请看下面的例子: c
  • 09.16 22:29:54
    发表了文章 2023-09-16 22:29:54

    C++的异常类型与多级catch匹配

    try-catch 的用法: try{ // 可能抛出异常的语句 }catch(exceptionType variable){ // 处理异常的语句 } 我们还遗留下一个问题,就是 catch 关键字后边的exceptionType variable,这节就来详细分析一下。exceptionType是异常类型,它指明了当前的 catch 可以处理什么类型的异常;variable是一个变量,用来接收异常信息。 当程序抛出异常时,会创建一份数据,这份数据包含了错误信息,程序员可以根据这些信息来判断到底出了什么问题,接下来怎么处理。异常既然是一份数据,那么就应该有数据类型。
  • 09.15 22:15:18
    发表了文章 2023-09-15 22:15:18

    C++new和delete运算符介绍

    内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。 以成员函数的形式重载 new 运算符: void * className::operator new( size_t size ){ //TODO: } 以全局函数的形式重载 new 运算符: void * operator new( size_t size ){ //TODO: } 两种重载形式的返回值相同,都是void *类型,并且都有一个参数,为si
  • 09.14 21:48:16
    发表了文章 2023-09-14 21:48:16

    C++下标运算符详解

    使用第一种声明方式,[ ]不仅可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只能访问而不能修改元素。在实际开发中,我们应该同时提供以上两种形式,这样做是为了适应 const 对象,因为通过 const 对象只能调用 const 成员函数,如果不提供第二种形式,那么将无法访问 const 对象的任何元素。下面我们通过一个具体的例子来演示如何重载[ ]。
  • 09.11 21:35:45
    发表了文章 2023-09-11 21:35:45

    C++重载输入和输出运算符

    在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是 C++ 内置的数据类型(例如 bool、int、double 等)和标准库所包含的类类型(例如 string、complex、ofstream、ifstream 等)。 如果我们自己定义了一种新的数据类型,需要用输入输出运算符去处理,那么就必须对它们进行重载。本节以前面的 complex 类为例来演示输入输出运算符的重载。 其实 C++ 标准库已经提供了 complex 类,能够很好地支持复数运算,但是这里我们又自己定义了一个 complex 类,这样做仅仅是
  • 09.10 21:08:37
    发表了文章 2023-09-10 21:08:37

    C++的运算符重载介绍

    所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。 实际上,我们已经在不知不觉中使用了运算符重载。例如,+号可以对不同类型(int、float 等)的数据进行加法操作;<<既是位移运算符,又可以配合 cout 向控制台输出数据。 C++ 本身已经对这些运算符进行了重载。C++ 也允许程序员自己重载运算符,这给我们带来了很大的便利。 下面的代码定义了一个复数类,通过运算符重载,可以用+号实现复数的加法运算:
  • 09.09 20:45:49
    发表了文章 2023-09-09 20:45:49

    C++中的typeid运算符

    typeid 运算符用来获取一个表达式的类型信息。类型信息对于编程语言非常重要,它描述了数据的各种属性: 对于基本类型(int、float 等C++内置类型)的数据,类型信息所包含的内容比较简单,主要是指数据的类型。 对于类类型的数据(也就是对象),类型信息是指对象所属的类、所包含的成员、所在的继承关系等。 类型信息是创建数据的模板,数据占用多大内存、能进行什么样的操作、该如何操作等,这些都由它的类型信息决定。 typeid 的操作对象既可以是表达式,也可以是数据类型,下面是它的两种使用方法: typeid( dataType ) typeid( expression ) dat
  • 09.08 22:12:38
    发表了文章 2023-09-08 22:12:38

    C++的纯虚函数和抽象类

    在C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。 包含纯虚函数的类称为抽象类(Abstract Class)。之所以说它抽象,是因为它无法实例化,也就是无法创建对象。原因很明显,纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间。抽象类通常是作为基类,让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化。纯虚函数使用举例:
  • 09.07 21:44:14
    发表了文章 2023-09-07 21:44:14

    C++中的多态和虚函数

    #include <iostream> using namespace std; //基类People class People{ public: People(char *name, int age); void display(); protected: char *m_name; int m_age; }; People::People(char *name, int age): m_name(name), m_age(age){} void Peopl
  • 09.06 20:49:17
    发表了文章 2023-09-06 20:49:17

    C++的向上转型

    在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍。例如: int a = 10.9; printf("%d\n", a); 输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。再如: float b = 10; printf("%f\n", b); 输出结果为 10.000000,编译器会自动添
  • 09.05 21:13:37
    发表了文章 2023-09-05 21:13:37

    C++中虚继承时的构造函数

    在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。 下面我们以菱形继承为例来演示构造函数的调用: #include <iostream> using namespace std; //虚基类A class A{ public: A(int a); protected: int m_a; }; A:
  • 09.04 22:18:11
    发表了文章 2023-09-04 22:18:11

    C++将派生类赋值给基类

    在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍。例如: int a = 10.9; printf("%d\n", a); 输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。再如: float b = 10; printf("%f\n", b); 输出结果为 10.000000,编译器会自动添
  • 09.03 20:34:07
    发表了文章 2023-09-03 20:34:07

    C++中的语法知识虚继承和虚基类

    多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示: 图1:菱形继承 类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,一份来自 A-->B-->D 这条路径,另一份来自 A-->C-->
  • 09.02 22:07:42
    发表了文章 2023-09-02 22:07:42

    C++的多重继承

    派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。 多继承容易让代码逻辑复杂、思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 等干脆取消了多继承。 多继承的语法也很简单,将多个基类用逗号隔开即可。例如已声明了类A、类B和类C,那么可以这样来声明派生类D: class D: public A, private B, protected C{ //类D新增加的成员 } D 是多继承形式的派生类,它以公有的方式继承 A 类,

2023年08月

  • 08.31 20:53:31
    发表了文章 2023-08-31 20:53:31

    C++的基类和派生类构造函数

    基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。 在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。 这种矛盾在C++继承中是普遍存在的,解决这个问题的思路是:在派生类的构造函数中调用基类的构造函数。 下面的例子展示了如何在派生类的构造函数中调用基类的构造函数:
  • 08.30 21:14:50
    发表了文章 2023-08-30 21:14:50

    C++中的继承和派生

    C++ 中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。 继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。 在C++中,派生(Derive)和继承是一个概念,只是站的角度不同。继承是儿子接收父亲的产业,派生是父亲把产业传承给儿子。 被继承的类称为父类或基类,继承的类称为子类或派生类。“子类”和“父类”通常放在一起称呼,“基类”和“派生类”通常放在一起称呼。 派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。
  • 08.29 21:55:02
    发表了文章 2023-08-29 21:55:02

    C++中的 class和struct区别

    C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。 C++中的 struct 和 class 基本是通用的,唯有几个细节不同: 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。 class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。 class 可以使用模板,
  • 08.28 21:04:53
    发表了文章 2023-08-28 21:04:53

    C++字符串详解

    C++ 大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串指针。 string 是 C++ 中常用的一个类,它非常重要,我们有必要在此单独讲解一下。 使用 string 类需要包含头文件<string>,下面的例子介绍了几种定义 string 变量(对象)的方法: #include <iostream> #include <string> using namespace std; int main(){ string s1
  • 08.27 19:21:15
    发表了文章 2023-08-27 19:21:15

    C++友元函数和友元类

    在 C++ 中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。 借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。 friend 的意思是朋友,或者说是好友,与好友的关系显然要比一般人亲密一些。我们会对好朋友敞开心扉,倾诉自己的秘密,而对一般人会谨言慎行,潜意识里就自我保护。 在 C++ 中,这种友好关系可以用 friend 关键字指明,中文多译为“友
  • 08.26 20:28:04
    发表了文章 2023-08-26 20:28:04

    C++中的const成员变量和成员函数

    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。 const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。 const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。 我们通常将 get 函数设置为常成员函数。
  • 08.25 22:11:08
    发表了文章 2023-08-25 22:11:08

    C++构造函数初始化列表

    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。 C++构造函数的初始化列表使得代码更加简洁,请看下面的例子: #include <iostream> using namespace std; class Student{ private: char *m_name; int m_age; float m_score; public: Student(char *name, int age, float s
  • 08.24 21:56:17
    发表了文章 2023-08-24 21:56:17

    C++类成员的访问权限以及类的封装

    C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。 Java、C# 程序员注意,C++ 中的 public、private、protected 只能修饰类的成员,不能修饰类,C++中的类没有共有私有之分。 在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。 在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 p
  • 08.23 22:38:35
    发表了文章 2023-08-23 22:38:35

    C++函数重载

    在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。
  • 08.22 22:31:41
    发表了文章 2023-08-22 22:31:41

    C++头文件和std命名空间

    C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译。 这个时候的 C++ 仍然在使用C语言的库,stdio.h、stdlib.h、string.h 等头文件依然有效;此外 C++ 也开发了一些新的库,增加了自己的头文件,例如: iostream.h:用于控制台输入输出头文件。 fstream.h:用于文件操作的头文件。 complex.h:用于复数计算的头文件。 和C语言一样,C++ 头文件仍然以.h为后缀,它们所包含的类、函数、宏等都是全局范围的。 后来 C++ 引入了命名空间的概
  • 08.21 21:39:46
    发表了文章 2023-08-21 21:39:46

    C++的对象与类的含义

    C++是一门面向对象的编程语言,理解C++需要掌握类(class)和对象(object)这两个概念。 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如: #include <stdio.h> //定义结构体 Student struct Student{ //结构体包含的成员变量 char *name; int age; float score; }; //显示结构体的成员变量 void displ
  • 08.20 21:48:04
    发表了文章 2023-08-20 21:48:04

    C++实现对回收站里的文件进行操作

    本篇文章主要为大家详细介绍了C++如何使用代码对回收站里的文件进行操作,譬如文件的删除与恢复等。 方式一:设置不同的SHFILEOPSTRUCT结构体,调用SHFileOperation函数就可以实现拷贝、删除、移动等文件操作 SHGetSpecialFolderLocation函数: 原型: HRESULT SHGetSpecialFolderLocation(HWND hwnd, int csidl, PIDLIST_ABSOLUTE* ppidl) 该函数用于获取特殊文件夹的物理路径。它接受以下参数: hwnd:可选参数,指定父窗口的句柄。如果不需要与窗口关联,可以设置为NU
  • 08.19 22:26:21
    发表了文章 2023-08-19 22:26:21

    QT设置widget背景图片

    首先说方法,在给widget或者frame或者其他任何类型的控件添加背景图时,在样式表中加入如下代码,指定某个控件,设置其背景。 类名 # 控件名 { 填充方式:图片路径 } 例如: QWidget#Widget { border-image: url(:/resource/bg2.png); } 或者 QFrmae#frame { border-image: url(:/resource/bg2.png); } 如果单纯改变样式表,没有指定控件的话,内部的其他控件背景也会改变。 特别提醒:类名 # 控件名,其中控件名要准确,假如你把widget的名字改成了其他,那么这里
  • 08.18 22:23:34
    发表了文章 2023-08-18 22:23:34

    C++中String的语法及常用接口用法

    在C语言中,string是一个标准库类(class),用于处理字符串,它提供了一种更高级、更便捷的字符串操作方式,string 类提供了一系列成员函数和重载运算符,以便于对字符串进行操作和处理。
  • 08.17 22:22:02
    发表了文章 2023-08-17 22:22:02

    VisualStudio打包项目文件为.exe安装包

    注意事项:打包项目前,确保项目能正常运行,不然打包毫无意义。
  • 08.16 21:45:13
    发表了文章 2023-08-16 21:45:13

    SQLite数据库实现数据增删改查

    当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储,并且支持数据的增删改查操作。其中,宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。 实现功能: 创建 SQLite 数据库表,用于存储宠物投喂器上传的数据。 实现对数据库表中数据的插入操作,即将从宠物投喂器接收到的数据存储到数据库中。 实现对数据库表中数据的查询操作,包括按照投喂间隔时间、水温、剩余重量等参数进行筛选,以便用户能够查看特定范围内的数据信息。 实现对数据库表中数据的修改操作,即可以修改已经存储的宠物投喂器上传的数据。 实现对数据库表中数据的删除操作,即可以删除已经存储的宠
  • 08.15 22:08:35
    发表了文章 2023-08-15 22:08:35

    QT使用QML实现地图绘制虚线

    QML提供了MapPolyline用于在地图上绘制线段,该线段是实线,因此我使用Canvas自定义绘制的方式在地图上绘制线段
  • 08.13 22:49:58
    发表了文章 2023-08-13 22:49:58

    C++使用new来初始化指向类的指针

    C++使用new来初始化类的指针 1.ClassName * p = new ClassName; 调用默认构造函数。 如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如 class NoConstructor    //没写构造函数的类 { public:     ~NoConstructor() {}     void printVal()      {          cout << m_val << endl;      } private:     int m_val; }; NoConstructor* p1 = new NoConstruct
  • 发表了文章 2025-02-12

    机器人SLAM建图与自主导航:从基础到实践

  • 发表了文章 2024-12-10

    Transformer图解

  • 发表了文章 2024-12-09

    基于波特图的控制系统设计算法

  • 发表了文章 2024-12-08

    基于YOLOv5和树莓派4B平台

  • 发表了文章 2024-12-07

    机器人SLAM建图与自主导航

  • 发表了文章 2024-12-05

    ROS机器视觉入门:从基础到人脸识别与目标检测

  • 发表了文章 2024-12-04

    使用URDF和Xacro构建差速轮式机器人模型

  • 发表了文章 2024-12-02

    深入解析PID控制算法:从理论到实践的完整指南

  • 发表了文章 2024-12-01

    负载开关IC:简化电源管理与提升系统稳定性的关键

  • 发表了文章 2024-11-27

    ROS2:从初识到深入,探索机器人操作系统的进化之路

  • 发表了文章 2024-11-26

    从基础到人脸识别与目标检测

  • 发表了文章 2024-11-24

    基于波特图的控制系统设计算法

  • 发表了文章 2024-11-18

    ROS机器视觉入门:从基础到人脸识别与目标检测

  • 发表了文章 2024-11-17

    负载开关IC:简化电源管理与提升系统稳定性的关键

  • 发表了文章 2024-11-15

    ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

  • 发表了文章 2024-11-13

    C++ 之 perf+火焰图分析与调试

  • 发表了文章 2024-11-10

    ROS2:从初识到深入,探索机器人操作系统的进化之路

  • 发表了文章 2024-11-08

    一款基于AB32VG1的桌面智能坞

  • 发表了文章 2024-11-06

    codigger体验过程记录

  • 发表了文章 2024-10-30

    配置C++的学习环境

正在加载, 请稍后...
滑动查看更多
  • 回答了问题 2024-12-10

    AI音色克隆挑战播客,它能模拟人的特质吗?

    AI 音色克隆技术能够在一定程度上模拟人的特质,并且已经引发了与播客领域的流量竞争。关于这一点,我自己的看法是:AI 音色克隆技术对人特质的模拟方面,我觉得AI 音色克隆技术通过对大量语音数据的学习和分析,可以精确地模拟出人类声音的音色、音高、语速、语调等物理特征,生成与特定人物极为相似的声音;与播客领域的流量竞争方面,我觉得AI 音色克隆技术为播客领域带来了新的流量入口和增长机会,各平台为了争夺这些新增流量以及巩固自身的用户基础,必然会加大在内容、技术、推广等方面的投入,加剧市场竞争,推动播客行业的发展和变革。因为AI出现的同时,帮助了我们改变生活,让我们的工作和生活得到了很好的改善,科技就是改变生活的,而AI就是时代的产物。
    踩0 评论0
  • 回答了问题 2024-07-07

    乘风问答官3月排位赛开启!AirPods 3代等你赢!

    重在参与
    踩0 评论0
  • 回答了问题 2024-07-07

    作为一个经典架构模式,事件驱动在云时代为什么会再次流行呢?

    在全行业数字化转型的时代,事件驱动架构(EDA)的流行并非偶然,而是多重因素共同作用的结果。 应对不确定性和快速变化 随着技术的快速发展和市场环境的不断变化,企业面临着越来越多的不确定性和快速变化的业务需求。传统的架构模式往往难以高效地应对这些挑战,因为它们通常较为僵化,难以快速适应变化。而事件驱动架构以其松耦合、灵活性和可扩展性,能够更好地适应这种不确定性。通过事件的发布和订阅模式,不同组件可以独立地进行开发、部署和扩展,提高了系统的灵活性和可维护性。 云计算和大数据的推动 云计算和大数据技术的快速发展为事件驱动架构的流行提供了重要支撑。云计算提供了强大的弹性和可伸缩性,使得事件驱动架构能够轻松应对高峰和变化的工作负载。同时,大数据技术带来了海量数据和复杂的业务流程,传统的架构模式难以高效处理这些数据。而事件驱动架构通过实时的事件处理和响应,能够快速地捕捉和处理不断涌现的数据事件,支持实时洞察和决策。 与微服务架构和云原生应用的契合 事件驱动架构与微服务架构和云原生应用相互契合,共同推动了数字化转型的深入发展。微服务架构强调将应用拆分成多个独立的服务,每个服务都可以独立地进行开发、部署和扩展。而事件驱动架构通过事件作为微服务之间的通信媒介,进一步增强了系统的灵活性和可维护性。同时,云原生应用强调以容器、微服务、DevOps等技术为基础,构建弹性、可伸缩的应用系统。事件驱动架构与这些技术的结合,使得企业能够构建更加灵活、可扩展的系统,快速响应市场变化。 提高开发效率和降低成本 事件驱动架构通过松耦合的通信方式,降低了组件之间的依赖关系,使得开发人员可以更加专注于单个组件的开发和优化。这种并行开发的方式大大提高了开发效率,缩短了产品上市时间。同时,由于事件驱动架构支持资源的弹性伸缩,企业可以根据实际需求动态调整资源分配,降低了运营成本。 实时数据处理和即时业务响应 在实时数据处理和分析场景中,事件驱动架构具有显著的优势。它能够快速地捕捉和处理不断涌现的数据事件,支持实时洞察和决策。这对于需要快速响应市场变化和客户需求的企业来说至关重要。通过事件驱动架构,企业可以实时地监控业务状况,及时调整策略,提高市场竞争力。 综上所述,事件驱动架构在云时代背景下再次流行并成为焦点的原因是多方面的。它不仅能够应对不确定性和快速变化的业务需求,还与云计算、大数据、微服务架构和云原生应用等技术相互契合,共同推动了数字化转型的深入发展。随着技术的不断进步和市场环境的不断变化,事件驱动架构的应用前景将更加广阔。
    踩0 评论0
  • 回答了问题 2024-01-22

    你完整阅读过源码吗?

    对于“读源码太枯燥,没啥意思”的观点,可以从多个角度理解和回应: 学习阶段与兴趣点:对于初学者或者对编程、软件架构尚不深入理解的开发者来说,直接阅读复杂的源代码确实可能感觉枯燥且难以吸收。他们可能更需要从基础概念、API文档和教学示例入手,逐步建立系统的知识体系。然而,随着技术能力和经验的增长,理解并研究高质量的源码能够帮助开发者提升设计思维和解决问题的能力,从而可能会发现其中的乐趣。 学习方法论:阅读源码并非一蹴而就的过程,也不是单纯地逐行扫描代码。有效的源码阅读应当结合问题导向、模块化分析以及适当的调试实践。通过了解项目背景、明确目标、拆分功能模块,甚至参与到社区讨论中,都可以让这个过程变得更有意义和吸引力。 价值体现:源码是众多优秀工程师智慧的结晶,尤其是开源项目中的顶级源码,它们代表了业界的最佳实践和创新思路。通过阅读源码,我们可以学习到如何优化性能、处理复杂逻辑,以及良好的编码规范和设计模式等,这对于个人成长和技术进步具有极大的价值。 挑战与乐趣:如同解谜一样,阅读源码有时就像解开一个精心设计的技术难题,克服挑战后所获得的成就感也是无法忽视的。此外,随着对源码理解的加深,逐渐掌握其运行机制,能更好地驾驭这项技术,这本身也是一种乐趣所在。 总之,“读源码枯燥”这一看法因人而异,取决于个体的学习阶段、方法及对技术探索的态度。在实践中找到适合自己的学习方式,将源码阅读融入日常开发和学习过程中,往往能收获更多有价值的经验和技能提升。
    踩0 评论0
  • 回答了问题 2024-01-22

    预见2024,你对技术革新有哪些猜想?

    边缘计算的普及:随着物联网设备的快速增长和边缘计算技术的成熟,边缘计算将在2024年得到更广泛的应用。边缘计算可以将数据处理和分析推向离终端设备更近的地方,减少数据传输延迟和带宽占用,提高响应速度和用户体验。 量子计算的商业化:量子计算作为一项前沿技术,具有在某些特定场景下超越传统计算能力的潜力。预计到2024年,量子计算将进一步商业化,云服务提供商可能会开始提供量子计算能力,以支持解决复杂问题和优化算法。 安全性和隐私保护的增强:随着云计算的普及,对于数据安全性和隐私保护的需求也越来越高。未来,云计算服务提供商将加强数据加密、访问控制和身份认证等安全机制,以确保用户数据的安全和隐私。 融合AI和云计算:人工智能(AI)在各个行业的应用越来越广泛,而云计算作为支持大规模数据处理和模型训练的基础设施,将与AI融合得更加紧密。未来,云服务提供商可能会提供更强大的AI平台和工具,使开发者能够更轻松地构建和部署AI应用。 可持续性和能源效率的关注:云计算数据中心的能源消耗一直是一个重要的问题。随着对可持续性的关注不断增加,云计算服务提供商将更加注重节能和环保,采用更高效的硬件设备和数据中心设计,以减少能源消耗和碳排放。
    踩0 评论0
  • 回答了问题 2023-07-14

    乘风问答官5月排位赛开启!话题、问题双赛道,Apple 妙控键盘等你赢!

    积极参与
    踩0 评论0
  • 回答了问题 2023-05-15

    百问求答(4)Flink专场!回答问题赢小爱智能音箱等好礼

    积极参与
    踩0 评论0
  • 回答了问题 2023-03-19

    你使用过哪些云产品组合进行开发?

    作为开发者,我们都知道云计算已经成为了当今软件开发行业的主要趋势。而阿里云作为国内领先的云计算服务提供商,不仅提供了各种云产品服务,还为开发者提供了方便易用的开发工具和平台,使得开发者可以更加轻松地进行开发和部署。 在阿里云的云产品组合中,常见的组合方式包括ECS + RDS、ECS + SLB、OSS + CDN和Function Compute + API Gateway等,不同的组合方式可以满足不同的业务需求和应用场景。 例如,我们在开发一个电商网站时,通常需要使用ECS来部署网站应用程序,使用RDS来存储用户数据和订单信息,使用SLB来实现负载均衡和高可用性。此时,我们可以使用阿里云的ECS、RDS和SLB服务来快速搭建一个高可用性的电商网站,从而为用户提供更好的体验。 云原生时代的到来,使开发者自己完成应用从开发到部署成为了可能。CloudBase 提供的各种基础设施,令开发者无需再纠结于各种服务器配置之中,这极大地解放了生产力,让你的想法可以快速实现和快速上线。开发者快来拥抱 Serverless 吧! uniapp云开发(云数据库) ![图片.png](https://ucc.alicdn.com/pic/developer-ecology /m77oqron7zljq_94efb8fe4cc6467b87cd0c3f496ec37d.png)
    踩0 评论0
  • 回答了问题 2023-03-19

    ModelScope社区上线,怎么看待它在AIGC发展中起到的作用?

    随着人工智能技术的不断发展,越来越多的企业和个人开始涉足这个领域,但由于人工智能技术的门槛较高,很多人在开始学习时都会感到困难重重。而Modelscope的上线则为这个问题提供了一个可行的解决方案,我记得Modelscope它能够让企业和个人开发者更方便地体验各种人工智能模型,然后就可以加速人工智能技术的普及和发展。AI模型的体量已经跃升至万亿的规模,但大模型的弊端日益凸显:大算力、强算法、大模型。这些都让一些普通开发者望而却步。通过开源,让技术壁垒和计算资源不再是阻碍,降低AI的应用门槛。达摩院的ModelScope正是在这样的共识下应运而生,一经推出就引起AI界极大的关注。
    踩0 评论0
  • 回答了问题 2023-03-19

    乘风问答官2月排位赛开启!话题、问题双赛道,Beats蓝牙耳机等你赢!

    积极学习,重在参与,技术迭代。
    踩0 评论0
  • 回答了问题 2023-03-19

    开发者参与开源软件项目有哪些好处?

    对于目前开源项目的一些思考: 1.随着国家对于技术的越来越重视,越来越多的开源平台和开源项目开始出现,例如目前也有很多的托管平台让技术开发者使用。比如说国际上最大的托管平台GitHub,国内知名的托管平台码云等等。 2.很多的开源项目也随之产生,方便了更多的开发者,我们可以使用更多的开源项目,参考别人优秀的想法,提高自己对于项目的认知水平。
    踩0 评论0
  • 回答了问题 2022-12-27

    2022年你和社区发生了哪些故事?

    我与阿里云社区之间的故事,从今年开始入驻社区之后,便参加了很多的活动,也获得了很多的奖励。一开始接触到阿里云的时候,是朋友的推荐,后面自己开始进一步接触,感觉社区挺不错的,输出了很多优质的文章,对自己的技术提升也有很大的帮助。后面自己也有幸写了自己的第一篇博客,很幸运的签约成为了阿里云社区的一员,由此开始了我的写作之路。从一开始的签约博主,到后来的星级博主,再到后来的专家博主,自己获得荣誉的同时,也创作了很多的文章,为社区的建设贡献了自己的力量。对于即将结束的2022年,我有很多的感悟,与社区之间也产生了很多的感情,希望在2023年阿里云社区能够越来越好,我也可以持续输出更多的优质文章,既能够提升自己的能力,又可以为社区的建设尽自己的力量。
    踩0 评论0
  • 回答了问题 2022-11-25

    OpenSearch如何添加自建MySQL数据源

    在网站上添加了 OpenSearch 功能以后,IE 7.0 和 Firefox 2.0 以上的浏览器(好吧,我承认在 Opera 和 Chrome 里没找到这个功能,但是 IE 8.0 RC 和 Firefox 3.05 是绝对没有问题的)就能够在自带的搜索栏里面添加这个网站的搜索功能了。 要添加 OpenSearch 功能,一共分三步: 第一步:实现 OpenSearch 功能; 第二步:编写 OpenSearch 描述文件; 第三步:添加对 OpenSearch 描述文件的引用。 ———————————————— 版权声明:本文为CSDN博主「happytdw」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_30045597/article/details/113320448
    踩0 评论0
  • 回答了问题 2022-11-25

    DataV到期被释放如何恢复

    释放SWAP 监控报警一个PVE节点的SWAP使用满了。
    踩0 评论0
  • 回答了问题 2022-11-25

    kibana如何开启公网访问

    配置Kibana私网访问白名单时,需要先打开Kibana私网访问开关(默认关闭)再进行操作。 Kibana公网访问默认开启(绿色),关闭Kibana公网访问功能,公网入口隐藏,您将无法通过公网进入Kiban...
    踩0 评论0
  • 回答了问题 2022-11-25

    Elasticsearch新购实例长时间生效中怎么办

    一般情况下,通过操作系统write接口写到磁盘的数据先到达 Elastic:在 Elasticsearch 中计算摄取延迟并存储摄取时间以提高可观察性 Elastic 中国社区官方博客
    踩0 评论0
  • 回答了问题 2022-11-25

    DataWorks写到外表单个文件超过5G如何处理

    减小JAR文件。DataWorks执行MapReduce作业的时候,需要在本地执行,所以保留Main函数即可。
    踩0 评论0
  • 回答了问题 2022-11-25

    Quick Bi 如何连接PolarDB MySQL

    通过公网连接阿里云PolarDB for MySQL 添加白名单。 公网连接阿里云PolarDB for MySQL之前,需要将Quick BI的IP地址加入到阿里云PolarDB for MySQL的白名单。
    踩0 评论0
  • 回答了问题 2022-11-25

    DataWorks如何计费

    每小时出账:每个小时统计前一个小时的实际使用量,并从账户余额中扣除实际消费的金额。 例如,当前时间是9:30,结算的是8:00~9:00期间产生的费用。 每日出账:每个自然日开始时,统计前一个自然日的实际使用量,并从账户余额中扣除实际消费的金额。
    踩0 评论0
  • 回答了问题 2022-11-25

    E-MapReduce如何创建集群

    登录阿里云 E-MapReduce 控制台。 在上方选择所在的地域(Region),所创建集群将会在对应的地域内,一旦创建后不能修改。 单击创建集群,进行创建。
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息