- 博客(268)
- 资源 (16)
- 收藏
- 关注
原创 Linux系统编译CUDA版的OpenCV4.2
OpenCV4.2版本新增DNN模块CUDA加速功能,但该功能位于opencv_contrib中,需要联合编译。本文记录了在Ubuntu16.04环境下编译OpenCV4.2与contrib时遇到的问题及解决方案,包括:1)安装必要依赖库;2)正确配置CUDA相关编译选项;3)解决编译过程中出现的缺失boostdesc文件和头文件问题;4)使用注意事项,如必须启用C++11标准支持。文章提供了修改后的opencv_contrib资源下载,帮助开发者避免重复踩坑。
2020-02-09 20:10:42
10850
14
原创 winscp传输大文件中断问题
使用WinSCP传输1G文件时遇错误,提示关闭“优化连接缓冲大小”。因该设置位于登录前的配置界面,易被忽略。正确操作为:登录前点击“编辑”→“高级”→左侧选“连接”,取消勾选“优化连接缓冲大小”,保存后重新登录即可成功传输。
2026-09-21 17:10:01
233
原创 ubuntu系统配置中文输入法
本文介绍了在Linux系统中安装和配置中文输入法的步骤:1)通过终端命令安装fcitx输入法框架和五笔拼音输入法;2)在系统语言支持设置中启用fcitx输入法并重启;3)重启后在输入法配置界面添加拼音输入法,最后通过Ctrl+空格键切换中英文输入。整个过程配有图示说明关键操作界面。
2026-07-29 17:06:42
338
原创 【和春笋一起学C++】(七十一)虚基类
本文摘要:文章探讨了C++虚基类在多继承场景中的应用。通过Worker、Singer和Waiter类的继承示例,说明多继承时可能产生的二义性问题(如多个基类同名方法和重复基类对象)。引入虚基类技术(使用virtual关键字)可确保派生类只继承一个共享的基类对象。文章重点分析了虚基类构造函数的特殊初始化要求(需显式调用虚基类构造函数)以及中间类同名方法的冲突问题,并提供了作用域解析和派生类重定义两种解决方案。这些内容为理解复杂继承关系提供了实践指导。
2026-07-15 14:57:05
213
原创 【和春笋一起学C++】(七十)私有继承与保护继承
本文介绍了C++中的私有继承和保护继承。私有继承通过将基类成员变为私有成员实现has-a关系,不继承基类接口但可在派生类中使用基类方法。与包含相比,私有继承更抽象但能访问基类保护成员并重定义虚函数。保护继承使基类成员成为派生类的保护成员,与私有继承的区别在于第三代类是否能使用基类接口。通常建议优先使用包含,仅在需要访问保护成员或重定义虚函数时考虑私有继承。
2026-07-11 18:57:31
326
原创 【和春笋一起学C++】(六十九)包含对象成员的类
文章摘要:本文介绍了C++中通过包含(组合)实现has-a关系的机制,以Student类设计为例展示如何重用现有类(如string和valarray)来构建新类。重点阐述了包含与继承的区别(不继承接口)、成员对象的初始化方式(成员初始化列表)以及类方法的实现细节。通过valarray处理数值数组和string管理字符串,Student类避免了直接使用动态内存分配,简化了代码并提高了安全性。文中提供了完整的类声明、方法实现及测试程序,展示了包含机制在实际开发中的应用价值。
2026-07-07 14:53:26
353
原创 【和春笋一起学C++】(六十八)类设计总结——公有派生
本文总结了C++继承中的核心概念和注意事项。主要内容包括:1) 公有派生建立is-a关系,派生类应是一种特殊的基类;2) 构造/析构函数不可继承,派生类需自行定义;3) 赋值操作符需特殊处理,基类指针可指向派生类对象;4) 保护成员对派生类开放而对外部隐藏;5) 虚方法实现动态联编;6) 基类应定义虚析构函数确保正确释放资源;7) 友元函数不可继承;8) 派生类可通过多种方式使用基类方法。文章强调继承机制中构造函数调用顺序、虚函数使用原则等关键点,为C++面向对象编程提供了重要指导。
2026-06-24 15:29:45
311
原创 【和春笋一起学C++】(六十七)类设计总结
摘要:本文系统介绍了C++编译器自动生成的成员函数及使用注意事项。主要内容包括:1. 编译器自动生成的默认构造函数、复制构造函数和赋值操作符函数的功能特性及使用场景;2. 构造函数与析构函数的特殊性质;3. 类型转换构造函数的隐式/显式调用机制;4. 对象参数传递和返回时的效率优化策略;5. const关键字在保护参数和成员数据中的应用。重点强调了涉及指针成员时需要自定义拷贝控制成员,以及按引用传递对象和返回引用的优势。这些机制共同确保了对象的正确初始化和高效操作。
2026-06-19 09:56:45
259
1
原创 【和春笋一起学C++】(六十六)抽象基类与纯虚函数
本文介绍了C++中虚函数、纯虚函数和抽象基类(ABC)的概念及应用。通过圆和椭圆的几何图形类示例,展示了如何将共性方法和数据提取到抽象基类中。抽象基类包含纯虚函数(如Area()),不能实例化,必须通过派生类(如Circle和Ellipse)实现具体功能。这种设计规范了接口规则,强制派生类遵循统一接口,体现了基于组件的编程思想,确保所有派生类至少支持基类指定的功能。
2026-06-16 09:55:24
246
原创 【和春笋一起学C++】(六十五)protected访问控制
本文对比了C++中private和protected访问控制符的区别。protected成员在类外表现与private相同,但在派生类中可被直接访问。通过Student基类和CulturalStudent派生类的例子说明,将name声明为protected可使派生类直接访问该成员,但这也带来了数据可能被意外修改的风险。建议对数据成员使用private访问控制,通过基类方法提供访问,而将成员函数设为protected可让派生类访问内部功能。protected更适合用于成员函数而非数据成员,以平衡访问便利性和封
2026-04-20 11:15:00
109
原创 【和春笋一起学C++】(六十四)单元素模式
单例模式确保类只有一个实例,并提供全局访问点。通过将构造函数设为protected防止外部直接实例化,必须通过静态方法GetTheOnlyInstance获取实例。该方法首次调用时创建静态实例并返回其地址,后续调用都返回同一个实例。静态实例在程序结束时自动释放,确保唯一性和资源管理。
2026-04-19 08:30:10
95
原创 【和春笋一起学C++】(六十三)虚函数特性(二)
本文主要介绍了虚函数的基本特性及使用注意事项。虚函数通过virtual关键字声明,支持运行时多态性,调用时依据对象类型而非指针/引用类型确定方法。关键点包括:1)构造函数不能为虚函数;2)析构函数应声明为虚函数以确保正确释放派生类资源;3)友元函数不能是虚函数;4)派生类未重定义虚函数时使用基类版本;5)重定义虚函数需保持原型一致(返回类型协变除外),重载版本需全部重定义否则会被隐藏。这些特性是C++实现多态的核心机制。
2026-04-17 10:37:09
476
原创 Ubuntu18.04系统添加额外的动态库和可执行文件路径
本文介绍了在Linux系统中配置动态库路径和可执行文件路径的方法。主要内容包括:1)通过修改~/.bashrc文件,使用export命令添加LD_LIBRARY_PATH动态库路径;2)使用相同方法添加PATH可执行文件路径;3)通过source命令使修改立即生效。文章还说明了~/.bashrc和/etc/bash.bashrc的区别,以及修改路径时的注意事项,如路径顺序、避免重复等问题。这些配置可帮助系统正确查找动态库和可执行程序。
2026-03-04 15:49:04
673
原创 Ubuntu18.04系统PATH错误修复与根目录权限恢复
摘要:Ubuntu 18.04系统中若误配PATH导致sudo失效,可通过以下步骤修复:1)备份.bashrc文件;2)修改.bashrc,手动设置默认PATH路径;3)执行source使配置生效;4)修复后通过sudo编辑/etc/bash.bashrc修正系统级PATH;5)恢复原.bashrc文件。该方法可快速恢复系统命令功能。(135字)
2026-03-04 10:33:11
147
原创 【和春笋一起学C++】(六十二)虚函数特性(一)
摘要:本文探讨了虚函数特性及其在多态中的应用,以及基类使用虚析构函数的重要性。通过Student类和CulturalStudent类的实例,展示了如何利用指针数组实现多态管理不同派生类对象。虚函数特性体现在运行时根据对象类型调用相应函数,而虚析构函数确保派生类对象被正确释放。当基类指针指向派生类对象时,虚析构函数能自动调用派生类析构函数,避免内存泄漏。文章强调,若派生类析构函数包含重要操作,基类必须使用虚析构函数以保证资源正确释放。
2026-03-01 20:07:48
635
原创 【和春笋一起学C++】(六十一)公有继承中的多态
摘要:本文探讨了公有继承中的多态机制,重点介绍了虚函数在实现多态行为中的作用。通过学生成绩计算案例,展示了基类Student和派生类CulturalStudent如何通过虚函数GetMean()实现不同平均分计算方式(3科vs5科)。文章详细说明了虚函数声明规则、调用机制及作用域解析操作符的使用,并强调了虚析构函数的重要性。实例演示了通过对象指针调用虚函数时,程序会根据实际对象类型而非指针类型选择对应方法版本,充分体现了多态特性。
2026-02-21 19:18:33
543
原创 Jetson Orin NX性能
JetPack为NVIDIA Jetson模组上的硬件加速边缘AI开发提供了完整的开发环境。JetPack包括带有引导加装程序的Jetson Linux,Linux内核,Ubuntu桌面环境,以及一整套用于加速GPU计算,多媒体,图形和计算机视觉的库。它还包括开发人员所需工具包的示例文档,并支持更高级别的SDK,例如用于流式视频分析的DeepStream。
2026-02-12 18:53:48
467
原创 【和春笋一起学C++】(六十)继承——is-a关系
本文介绍了C++中的五种类关系:is-a、has-a、is-like-a、is-implemented-as-a和uses-a。重点阐述了is-a关系通过公有继承实现派生类与基类的继承关系,如Student类派生出CulturalStudent类。同时指出其他关系不能使用公有继承:has-a关系应采用类对象作为成员的方式实现,而is-like-a、is-implemented-as-a和uses-a关系都不适合用继承方式建立。文章强调只有is-a关系适合使用公有继承,其他关系采用继承会导致程序设计问题。
2026-02-06 21:32:12
635
原创 【和春笋一起学C++】(五十九)派生类和基类之间的关系
摘要:本文介绍了C++中派生类的使用方法及派生类与基类的关系。主要内容包括:1)派生类和基类声明通常放在同一头文件中,基类声明需在前;2)公有派生允许派生类使用基类方法,基类指针/引用可指向派生类对象;3)引用兼容性使得基类引用形参可接受派生类实参;4)派生类对象可初始化或赋值给基类对象,此时仅复制基类部分成员。这些特性体现了继承关系中的单向兼容原则。
2026-02-05 19:23:51
691
原创 【和春笋一起学C++】(五十八)类继承
摘要:本文介绍了C++中类继承的概念及其实现方式。类继承允许从基类派生出新类,派生类自动继承基类的数据成员和方法。文章以学生类为例,展示了如何从基类Student派生出文科生CulturalStudent和理科生ScienceStudent类。重点讲解了派生类构造函数的实现要点:必须通过成员初始化列表调用基类构造函数,基类对象先于派生类创建,析构顺序则相反。派生类可以扩展基类功能,添加新的数据成员和方法,同时保持基类的原有特性,体现了面向对象编程的代码重用优势。
2026-02-05 13:33:04
757
原创 【和春笋一起学C++】(五十七)链表数据结构及其应用
本文介绍了链表的基本概念及其在队列实现中的应用。主要内容包括:1.链表的基本概念和结构;2.以ATM排队系统为例,详细设计了基于链表的队列类实现方案;3.重点阐述了队列的核心方法实现,包括入队(enqueue)和出队(dequeue)操作;4.讨论了析构函数、复制构造函数等特殊成员函数的实现要点;5.提供了完整的队列类实现代码。文章通过链表结构实现了队列的先进先出特性,避免了数组实现时的元素移动问题,并考虑了内存管理、异常处理等细节问题。
2026-01-29 19:27:02
793
原创 【和春笋一起学C++】(五十六)使用成员初始化列表初始化类中的常量
摘要:本文介绍了C++成员初始化列表的语法和使用场景,重点说明了对const成员和引用成员必须使用初始化列表进行初始化。通过修改Cvector类示例,展示了如何为包含const成员的类正确实现构造函数和重载赋值运算符:1)所有构造函数必须使用初始化列表初始化const成员stepLength;2)必须显式定义赋值运算符以避免对const成员的非法赋值操作。文章还指出成员初始化顺序由类声明顺序决定,与初始化列表顺序无关。
2026-01-23 22:15:34
395
原创 【和春笋一起学C++】(五十五)在类中嵌套结构或类
本文介绍了类中嵌套结构体/类的概念及实现方法。嵌套声明的作用域限定在包含类内,其可见性取决于声明位置(私有/公有部分)。示例展示了在Cvector类中嵌套定义position结构体/类,用于表示坐标位置,并在类方法中访问嵌套成员。文章还提供了修改后的类实现代码和main函数示例,演示了如何通过嵌套结构体存储和显示位置信息,以及进行向量运算。最后指出嵌套类与结构体可以互换使用,并给出了相应的类声明示例。
2026-01-22 20:37:23
378
原创 【和春笋一起学C++】(五十四)构造函数中使用new的类在设计时的注意事项
本文总结了C++中使用new操作符管理类成员内存的关键规则:1)析构函数必须使用对应的delete释放内存;2)构造函数和析构函数必须匹配使用new/delete或new[]/delete[];3)需要定义复制构造函数来正确初始化对象;4)必须重载赋值运算符实现深拷贝。这些规则确保了动态内存的正确分配和释放,防止内存泄漏和悬空指针等问题。通过遵循这些原则,可以构建健壮的类来处理动态内存管理。
2026-01-13 17:29:26
267
原创 【和春笋一起学C++】(五十三)使用指向对象的指针
本文介绍了在C++中使用指针操作MyClassString对象的两种方法。方法一通过指针直接跟踪数组元素,找出字符串长度最大的对象;方法二使用new创建对象指针,但需要注意内存泄漏问题。文章详细说明了指针的声明、初始化、访问类方法以及解除引用操作,并比较了两种方法的内存管理差异,强调方法二可能导致的析构函数未调用和内存泄漏问题。最后总结了使用指针操作对象的5个要点,包括指针声明、初始化、new操作符使用、成员访问和解除引用等核心概念。
2026-01-13 11:23:44
946
原创 【和春笋一起学C++】(五十二)关于函数返回对象时的注意事项
摘要:本文探讨了C++函数返回对象的四种方式:返回对象、返回对象引用、返回const对象和返回const对象引用。返回对象会调用复制构造函数,效率较低但适用于局部变量;返回引用效率更高但不能用于局部对象。const返回可防止篡改,而const引用返回能提升效率。选择原则是:局部对象必须返回对象;无公有复制构造函数的类必须返回引用;优先选择引用返回以提高效率。文章通过string类和自定义类的示例说明了各种情况下的正确用法。
2026-01-04 22:29:54
734
原创 【和春笋一起学C++】(五十一)复制构造函数
本文介绍了C++中复制构造函数的基本概念和使用场景。复制构造函数用于初始化新对象时复制现有对象,当类中没有显式定义时,编译器会自动生成隐式复制构造函数。文章重点阐述了三种必须显式定义复制构造函数的情况:当类包含new初始化的指针成员时,必须进行深度复制以避免浅复制问题;当函数按值传递或返回对象时会自动调用复制构造函数;默认复制构造函数会逐个复制数据值,但静态成员不受影响。文中通过MyClassString类的示例,说明了深度复制与浅复制的区别,强调了指针成员类必须显式定义复制构造函数的重要性。
2025-12-14 20:37:04
612
原创 【和春笋一起学C++】(五十)在构造函数中使用new时的注意事项
摘要:C++中使用new和delete管理指针成员时需遵循配对原则:new对应delete,new[]对应delete[]。构造函数中指针初始化方式必须统一(带或不带[]),以兼容单一析构函数。允许将指针初始化为NULL/0,因delete可作用于空指针。NULL与0等效,但C++更倾向使用0。深度复制场景(如复制构造函数和赋值运算符)需分配新空间并复制数据,而非仅复制地址。
2025-12-13 22:35:06
348
原创 【和春笋一起学C++】(四十九)C++中string类的简介
本文介绍了C++中实现类似cstring库功能的string类设计方法。通过自定义MyClassString类,实现了字符串的基本操作:1)默认构造函数处理空字符串;2)重载比较运算符(<,>,==)使用strcmp函数实现字符串比较;3)重载赋值运算符直接处理C风格字符串;4)重载[]运算符实现字符访问和修改。类设计中采用动态内存管理,通过new/delete处理字符串存储,并支持C字符串与自定义类的转换。这些方法为C++字符串操作提供了面向对象的实现方案。
2025-12-03 22:12:07
789
原创 【和春笋一起学C++】(四十八)在类中声明静态数据成员
摘要:本文探讨了C++中类的静态数据成员特性,包括声明、初始化和使用方法。静态数据成员在类声明中声明,通常在实现文件中初始化,所有对象共享同一静态成员。文章通过在Cvector类中添加静态成员num_steps来统计创建的对象数量,演示了静态成员的使用。实例显示,通过对象访问静态成员时,所有对象共享同一变量,能够准确记录对象创建次数。特别强调了头文件中不能初始化静态成员以避免重复定义错误,以及静态成员独立于对象存储的特性。运行结果验证了静态成员的正确使用方式。
2025-11-02 22:42:58
516
原创 【和春笋一起学C++】(四十七)C++程序中的bootstrap函数
程序启动时,除了main函数外,往往需要在程序运行前进行初始化操作。这可以通过bootstrap函数实现,分为隐式启动(编译器自动处理)和自定义引导。C++中利用全局对象在main前初始化的特性,可以实现配置文件加载和日志系统初始化等功能。例如定义全局ConfigInfo对象自动读取配置,或创建Logger全局对象初始化日志系统。这些操作都在main函数执行前完成,确保程序正确运行环境。
2025-10-29 15:32:04
320
原创 【和春笋一起学C++】(四十六)类的自动类型转换和强制类型转换
本文介绍了C++中的类型转换机制,包括内置类型的自动/强制转换和类的类型转换。对于内置类型,编译器会自动进行兼容类型的转换,不兼容类型需使用强制转换。对于类类型,接受单一参数的构造函数可实现隐式转换,但使用explicit关键字可限制只能显式转换。文章还详细说明了类的隐式转换的多种形式,包括初始化、赋值、传参和返回值等情况,并指出当存在多个可能的转换路径时可能产生二义性问题。
2025-10-28 11:19:05
929
原创 【和春笋一起学C++】(四十五)多线程编程中的线程安全问题
本文探讨了C++多线程编程中的线程安全问题及解决方案。重点分析了rand()函数的非线程安全特性及其导致的静态变量竞争问题,建议使用<random>库替代。通过随机行走理论程序的单线程(232ms)与多线程(137ms)实现对比,展示了多线程约41%的性能提升。文中详细介绍了使用mutex和lock_guard保护共享变量(vector_steps和outf)以避免数据竞争的方法,说明了lock_guard自动加锁/解锁的RAII机制在简化线程同步中的重要作用。
2025-09-23 20:55:54
493
原创 【和春笋一起学C++】(四十四)随机行走理论——编程实现
文章摘要:本文探讨了随机行走理论在程序设计中的实现方法。首先介绍使用传统C++随机函数rand()和srand()生成伪随机数的局限性,并给出了矢量类Cvector的实现方案。然后重点分析了C++11标准中更先进的随机数生成方法,包括梅森旋转算法引擎std::mt19937和各种分布类。通过对比两种实现方式,展示了如何利用<random>头文件生成更安全、更可靠的随机数序列,最终应用于随机行走模拟程序中。文章提供了完整的代码示例,包括类定义和使用方法。
2025-09-23 09:24:26
991
原创 随机行走理论——哲学与自然科学之间的关联
摘要:本文通过"醉鬼走路"的数学问题,探讨了随机行走与人生迷茫的相似性。通过建立数学模型(固定步长、随机方向)和计算机模拟(1000次试验),验证了步数与距离的关系。研究发现,尽管步数波动较大(如步长1英尺时345~10882步),但平均步长与理论值接近。作者由此引申出人生哲理:迷茫时应保持自信,大胆前行。虽然方向可能随机,但只要不停步,终能实现目标。文章还提供了相关C++编程实现的参考。
2025-09-17 16:30:04
452
原创 【和春笋一起学C++】(四十三)友元函数的常见用途——重载输出操作符
本文介绍了如何通过友元函数重载<<操作符来输出自定义类Ctime的对象数据。传统方法需调用show_time()成员函数,而重载后可直接使用cout<<t1形式。关键点在于将重载函数定义为友元函数并返回ostream引用,以支持链式调用如cout<<t1<<t2。文章还展示了如何将对象数据写入文件,并解释了操作符从左到右的结合特性及ostream引用的继承特性。通过这种重载方式,实现了与内置类型一致的对象输出功能。
2025-09-16 11:14:03
525
原创 【和春笋一起学C++】(四十二)友元函数
本文介绍了C++中的友元函数及其应用。通过重载乘法运算符的示例,说明成员函数重载与非成员函数重载的区别:成员函数要求左操作数为对象,而非成员函数则更灵活。为解决非成员函数访问私有成员的问题,可以使用友元函数,即在类声明中以friend关键字声明函数,使其获得访问私有成员的权限。文中详细演示了如何将operator*()声明为友元函数,并比较了友元函数与普通非成员函数的区别,强调友元函数必须通过对象访问私有成员。该机制有效扩展了运算符重载的灵活性。
2025-09-10 07:42:09
467
原创 【和春笋一起学C++】(四十一)操作符重载
本文介绍了C++操作符重载的概念与实现方法。操作符重载通过operatorop()函数实现,允许扩展操作符到用户定义类型。以Ctime类为例,演示了如何将sumTime()成员函数重载为operator+(),使两个时间对象能用+相加。文章还说明了重载操作符的调用方式(函数表示法或操作符表示法),并验证了多对象相加的有效性。此外,展示了如何重载*操作符实现时间对象与数值相乘。操作符重载增强了代码可读性,使对象操作更直观。
2025-09-08 16:18:47
464
原创 【和春笋一起学C++】(四十)抽象数据类型
摘要:本文介绍了使用C++类实现堆栈抽象数据类型(ADT)的方法。通过定义stack类,使用私有数组存储数据,MAX枚举设置容量,top索引跟踪栈顶位置。公有成员函数包括构造器、isempty()/isfull()判断、push()/pop()操作。push()在栈未满时添加数据并递增top,pop()在栈非空时返回栈顶数据并递减top。typedef定义Item类型便于修改元素类型,体现了ADT的通用性特点。整个实现将堆栈操作封装为类接口,隐藏内部数据存储细节。
2025-09-05 16:47:17
329
原创 【和春笋一起学C++】(三十八)this指针、对象数组以及类的接口变更
本文介绍了C++中this指针和对象数组的使用方法。this指针指向调用它的对象,通过this->可以显式访问类成员和方法。对象数组的初始化需要使用构造函数,可以通过不同构造函数初始化不同元素,但必须包含默认构造函数。文章还区分了接口变更(修改公有部分)和实现变更(修改私有部分),指出类设计应尽量使自定义类型与内置类型使用方式一致。文中以Student类为例,展示了show_score()和get_average_score()方法中使用this指针的两种写法,以及对象数组初始化的多种方式。
2025-09-03 16:19:11
816
解决pjreddie版darknet在cudnn8.x环境下的编译问题
2022-05-18
VS2017环境下的tinyXML库
2022-05-09
opencv4.2,包括了扩展库opencv_contrib
2022-04-12
setuptools-36.2.4.zip
2020-02-27
GDAL111版本,包含proj.dll库,能实现坐标系统的转换功能
2018-05-04
opencv3.4.7build.zip
2020-01-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅