当前位置: 首页 > news >正文

C++课程笔记 类和对象

类概念

结构体:只要属性

类:有属性也有方法

c++可以省略struct  c不行

#include<iostream>
using namespace std;typedef struct queue1
{int a;queue1 q() {queue1 q(2);return q;};queue1(){}queue1(int qa){a = qa;}
}q1;
int main()
{queue1 Q1;queue1 Qt=Q1.q();cout << Qt.q().a<<endl;q1 Q2(2);cout << Q1.a<<endl;cout << Q2.a;
}

struct内部成员默认公有,class默认私有。

public private不分上下

声明定义分离原因:

方便代码阅读

Q1.h:

#include<iostream>
#include<stdbool.h>
using namespace std;
class Cycle
{
public :void Init(int n = 4);int getr();
private:int r;
};class Point
{
public:void Init(int a = 4,int b=4);int geta();int getb();
private:int a;int b;
};
void  ifin(Cycle& c, Point& p);

源.cpp:

#define _CRT_SECURE_NO_WARNINGS 1
#include"Q1.h"
void Cycle::Init(int n) {r = n;
}
int Cycle::getr() {return r;
}
void Point::Init(int m, int n)
{a = m;b = n;
}
int Point::geta() {return a;
}
int Point::getb() {return b;
}
void  ifin(Cycle& c,Point& p)
{int d1 = p.geta() * p.geta() + p.getb() * p.getb();int d2 = c.getr() * c.getr();if (d1 > d2){cout << "不在" << endl;}if (d1 <= d2){cout << "在" << endl;}return;
}

test.cpp

#include"Q1.h"int main()
{Cycle c1;Point p1;ifin(c1, p1);
}

类和对象存储:

成员方法存储在公共区方法

成员变量按结构体空间计算

只有成员函数的类大小都是1

构造函数

构造函数完成初始化

class Date {
public:Date(int year, int month){_year = year;_month = month;}void print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year;int _month;int _day;
};
int main()
{/Date d1(2019, 4);d1.print();
}

class Date {
public:Date(int year=2020, int month=2,int day=1){_year = year;_month = month;_day = day;}Date(){_year = 2019;_month = 2;_day = 1;}void print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1(2021);d1.print();
}
class Date {
public:Date(int year=2020, int month=2,int day=1){_year = year;_month = month;_day = day;}Date(){/*	_year = 2019;_month = 2;_day = 1;*/}void print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year;int _month;int _day;
};
int main()
{Date d1;d1.print();
}

全缺省构造可代替无参构造

class Stack
{
public:Stack(int capacity = 4){_a = (int*)malloc(sizeof(int) * capacity);if (_a == nullptr){perror("malloc fail");exit(-1);}_top = 0;_capacity = 4;}void Push(int t){_a[_top++] = t;}void Print(){for (int i=0;i<_top;i++){cout << _a[i] << endl;}}
private:int* _a;int  _top;int _capacity;
};
int main()
{Stack s;s.Push(1);s.Push(2);s.Print();
}

class A {
public:A(){_a = 1;cout << "A()构造函数" << endl;}
private:int _a;
};
class Date {
public:/*Date(int year=2020, int month=2,int day=3){_year = year;_month = month;_day = day;}*///Date()//{///*	_year = 2019;//	_month = 2;//	_day = 1;*///}void print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year;int _month;int _day;A _A;
};
int main()
{Date d1;return 0;
}

默认构造函数内置类型不处理,自定义类型使用自定义类型默认构造函数。

用栈实现队列中,此类就不用写MyQueue构造函数,可以用MyQueue默认生成的,调用Stack默认构造函数。

释放时也会调用Stack默认析构函数,内置类型同样不会处理,自定义类型调用默认析构函数。

class Stack
{
public:Stack(int capacity = 4){_a = (int*)malloc(sizeof(int) * capacity);cout << "Stack 构造" << endl;if (_a == nullptr){perror("malloc fail");exit(-1);}_top = 0;_capacity = 4;}~Stack(){cout << "Stack 析构" << endl;free(_a);_a = nullptr;_top = 0;_capacity = 0;}void Push(int t){_a[_top++] = t;}void Print(){for (int i=0;i<_top;i++){cout << _a[i] << endl;}}
private:int* _a;int  _top;int _capacity;A _A;
};
class MyQueue {private:Stack s1;
};
int main()
{MyQueue m1;return 0;
}

 

自定义类型构造被内置类型扰乱了 

可以用一下c++11特性解决

class Date {
public:/*Date(int year=2020, int month=2,int day=3){_year = year;_month = month;_day = day;}*///Date()//{///*	_year = 2019;//	_month = 2;//	_day = 1;*///}void print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year=2019;int _month=3;int _day=3;A _A;
};

不传参数就能调用的构造函数是默认构造

析构函数

malloc手动free后销毁

~Stack(){free(_a);_a = nullptr;_top = 0;_capacity = 0;}

return时调用析构函数

拷贝构造

class Date {
public:Date(int year=2019, int month=2,int day=3){_year = year;_month = month;_day = day;}Date(Date& d){cout << "拷贝构造" << endl;_year = d._year;_month = d._month;_day = d._day;}void print(){cout << _year << " " << _month << " " << _day << endl;}
private:int _year=2019;int _month=3;int _day=3;A _A;
};
void Func1(Date d)
{cout << "Func1" << endl;
}
void Func2(Date& d) {cout << "Func2" << endl;}
int main()
{Date d1;Func1(d1);Func2(d1);return 0;
}

只要Func1调用了拷贝构造 

拷贝构造前加const 为了避免错误更改原先对象

 

 

class Stack
{
public:Stack(int top,int capacity = 4){_a = (int*)malloc(sizeof(int) * capacity);cout << "Stack 构造" << endl;if (_a == nullptr){perror("malloc fail");exit(-1);}_top = 0;_capacity = capacity;}~Stack(){cout << "Stack 析构" << endl;free(_a);_a = nullptr;_top = 0;_capacity = 0;}void Push(int t){_a[_top++] = t;}void Print(){for (int i=0;i<_top;i++){cout << _a[i] << endl;}}
private:int* _a;int  _top;int _capacity;A _A;
};
int main()
{Stack s(4,4);Stack s2(s);return 0;
}

 默认拷贝构造是浅拷贝,函数释放后会free两次,会报错

自定义深拷贝:

class Stack
{
public:Stack(int top,int capacity = 4){_a = (int*)malloc(sizeof(int) * capacity);cout << "Stack 构造" << endl;if (_a == nullptr){perror("malloc fail");exit(-1);}_top = 0;_capacity = capacity;}Stack(const Stack& s){_a = (int*)malloc(sizeof(int) * s._capacity);{if (_a == nullptr){perror("malloc fail");exit(-1);}}memcpy(_a, s._a, sizeof(int) * s._top);_top = s._top;_capacity = s._capacity;}~Stack(){cout << "Stack 析构" << endl;free(_a);_a = nullptr;_top = 0;_capacity = 0;}void Push(int t){_a[_top++] = t;}void Print(){for (int i=0;i<_top;i++){cout << _a[i] << endl;}}
private:int* _a;int  _top;int  _capacity;//A _A;
};
int main()
{Stack s(0,4);s.Push(1);s.Push(2);s.Print();Stack s2(s);return 0;
}

 不用写拷贝构造:

运算符重载

class Date {
public:Date(int year=2019, int month=2,int day=3){_year = year;_month = month;_day = day;}Date(Date& d){cout << "拷贝构造" << endl;_year = d._year;_month = d._month;_day = d._day;}void print(){cout << _year << " " << _month << " " << _day << endl;}bool operator ==(const Date& d){return _year == d._year && _month == d._month && _day == d._day;}
private:int _year=2019;int _month=3;int _day=3;A _A;
};
int main()
{Date d1(2019,3,2);Date d2(2020, 4, 3);cout << (d1 == d2) << endl;//加括号避免运算符优先级问题return 0;
}

 

在 C++ 中,运算符重载函数 bool operator==(const Date& d) 只需要一个参数的原因是,它实际上是在定义一个成员函数。成员函数隐含地有一个指向当前对象(即 this 指针)的参数,因此只需要提供与当前对象进行比较的另一个 Date 对象作为参数。

具体解释:

  1. 隐含的 this 指针: 当你在类内部定义一个成员函数时,这个函数可以访问类的成员变量和成员函数。每个成员函数都有一个隐含的 this 指针,它指向调用该函数的对象。operator== 作为成员函数时,隐含的 this 指针会指向调用 == 运算符的那个对象。

    例如,假设有两个 Date 对象 d1d2,当你写 d1 == d2 时,编译器实际上会将其转换为 d1.operator==(d2)。此时,this 指针指向 d1,而 d2 作为参数传递给 operator== 函数。

  2. 参数个数:

    • 成员函数重载: 对于成员函数形式的运算符重载,== 只需要一个参数,因为 this 指针隐式地传递了调用该运算符的对象。

bool operator ==(const Date& d){return _year == d._year && _month == d._month && _day == d._day;}bool operator>(const Date& d){if (_year > d._year){return true;}else if (_year == d._year && _month > d._month){return true;}else if (_year == d._year && _month == d._month && _day > d._day){return true;}return false;}bool operator >=(const Date& d){

计算日期程序: 

class Date {
public:Date(int year=2019, int month=2,int day=3){_year = year;_month = month;_day = day;}Date(const Date& d){cout << "拷贝构造" << endl;_year = d._year;_month = d._month;_day = d._day;}//Date()//{///*	_year = 2019;//	_month = 2;//	_day = 1;*///}int GetMonthDay(int year, int month){static int monthday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && (year % 4 == 0 && year % 100 != 0 )|| year % 400 == 0){return 29;}return monthday[month];}Date operator+=(int day){_day = day + _day;int monthday = GetMonthDay(_year, _month);while (_day > monthday){++_month;if (_month == 13){_year++;_month = 1;}_day = _day - monthday;monthday = GetMonthDay(_year, _month);}return *this;}Date& operator+(int day){Date ret(*this);ret += (day);return ret;}void print(){cout << _year << " " << _month << " " << _day << endl;}bool operator ==(const Date& d){return _year == d._year && _month == d._month && _day == d._day;}bool operator>(const Date& d){if (_year > d._year){return true;}else if (_year == d._year && _month > d._month){return true;}else if (_year == d._year && _month == d._month && _day > d._day){return true;}return false;}bool operator >=(const Date& d){return *this == d || *this > d;}
private:int _year=2019;int _month=3;int _day=3;A _A;
};
int main()
{Date d1(2024,9,10);Date d2(2019, 3, 2);cout << (d1 == d2) << endl;cout << (d1 > d2) << endl;cout << (d1 >= d2) << endl;d1 += 100000;Date d3(d1+10);return 0;
}

 

Date& operator=(const Date& d){_year = d._year;_month = d._month;_day = d._day;return *this;
//return d会出现权限放大}
int main()
{Date d1(2024,9,10);Date d2(2019, 3, 2);d1 = d2;return 0;
}

 

不显示写赋值重载,默认生成的,对自定义类型会浅拷贝

显示写重载,先释放,再开辟空间。

Stack& operator=(const Stack& s){if(this!=&s)
{free(_a);_a = (int*)malloc(sizeof(int) * s._capacity);if (_a == nullptr){perror("malloc fail");exit(-1);}memcpy(_a, s._a, sizeof(int)*s._top);_top = s._top;_capacity = s._capacity;return *this;
}}

运算符重载目的是让自定义类型对象可以用运算符。

this指针默认抢了第一个位置

在.h中定义的Print在两个cpp文件都有定义,链接符号表时出现问题

改成静态可以解决问题 不进符号表

声明定义分离也可以解决问题

.h没有定义,不会进符合表

内敛函数在调用的地方直接展开,也可以解决问题。

友元函数:

友元函数没有this指针。 在类中任意位置可以进行友元声明

可以不用去掉private 

权限放大只出现在指针和引用上。 

this指针默认是不能修改的。 

   

初始化列表

 

 

_m不显示写构造,会调用默认构造

类C没有默认构造:

类C有默认构造:

i给rd引用 i给rd的是临时变量,临时变量具有常性。 

加入explicit就不允许隐式类型转换发生了。 

int N = 0;
class A {
public:A(int a):_a(a){N++;cout << "A()构造函数" << endl;}A(const A& a):_a(a._a){N++;cout << "A()拷贝构造函数" << endl;}
private:int _a;
};
void Func(A a)
{}
int main()
{A a1(1);A a2 = 2;A a3 = a1;Func(a3);cout << N<<endl;
}

A a3=a1 构造+拷贝构造被优化成了拷贝构造 

 

A::N,指定类域会到命名空间中找, 不指定会先到局部再到全局中找,找不到会报错。

class A {
public:A(int a=1):_a(a){N++;cout << "A()构造函数" << endl;}A(const A& a):_a(a._a){N++;cout << "A()拷贝构造函数" << endl;}int GetN(){return N;}
private:int _a=1;static int N ;
};
int A::N = 0;
int main()
{A a1;A a2 = 2;A a3 = a1;//Func(a3);cout <<a3.GetN()<<endl;cout << a2.GetN() << endl;
}

 

应该n数组构造n个对象 

友元类:

class Time {friend  class Date;
public:Time(int hour=1, int minute=1, int second=1):_hour(hour), _minute(minute), _second(second){}
private:int _hour;int _minute;int _second;
};
class Date {
public:friend ostream& operator<<(ostream& out, const Date& d);friend istream& operator>>(istream& in, Date& d);Date(int year=2019, int month=1,int day=3){_year = year;_month = month;_day = day;}Date(const Date& d){cout << "拷贝构造" << endl;_year = d._year;_month = d._month;_day = d._day;}void SetTime(int hour, int minute, int second){_t._hour = hour;_t._minute = minute;_t._second = second;}private:int _year=2019;int _month=3;int _day=3;//A _A;Time _t;
};

 内部类:

 

class A {
public:A(int a=1):_a(a){N++;cout << "A()构造函数" << endl;}A(const A& a):_a(a._a){N++;cout << "A()拷贝构造函数" << endl;}class B {public:void foo(){}};static int GetN(){return N;}
private:int _a=1;static int N ;
};
int main(){
A::B ab1;ab1.foo();
}

匿名对象:

 

创建完直接销毁

 

 

 

 

引用的话需要加const 因为传的是临时变量 具有常性 

 

 

 

相关文章:

C++课程笔记 类和对象

类概念 结构体&#xff1a;只要属性 类&#xff1a;有属性也有方法 c可以省略struct c不行 #include<iostream> using namespace std;typedef struct queue1 {int a;queue1 q() {queue1 q(2);return q;};queue1(){}queue1(int qa){a qa;} }q1; int main() {queue1 Q1;…...

提问即创作:用Prompt提示词引领AI灵感爆发

文章目录 &#x1f34a;AI内容创作的精髓&#xff1a;提示词Prompt1 什么是提示词工程?1.1 提示词是如何影响AI的输出结果?1.2 提示词的原理是什么1.3 提示词工程师的前景1.4 谁能成为提示词工程师&#xff1f;1.5 提示词的未来前景 2 提示词的基本书写技巧3 常见的提示词框架…...

一码空传临时网盘PHP源码,支持提取码功能

源码介绍 一码空传临时网盘源码V2.0免费授权&#xff0c;该源码提供了一个简单易用的无数据库版临时网盘解决方案。前端采用了layui开发框架&#xff0c;后端使用原生PHP编写&#xff0c;没有引入任何开发框架&#xff0c;保持了代码的简洁和高效。 这个程序使用了一个无数据…...

自然语言处理实战项目

自然语言处理实战项目 自然语言处理&#xff08;NLP, Natural Language Processing&#xff09;是人工智能的重要分支之一&#xff0c;致力于让计算机理解、生成并与人类进行语言交互。随着深度学习、神经网络和大数据的发展&#xff0c;NLP技术在近年来取得了飞跃性的进展&am…...

人工智能物联网的去中心化和分布式学习:全面综述、新兴挑战和机遇

这篇论文的标题是《Decentralized and Distributed Learning for AIoT: A Comprehensive Review, Emerging Challenges, and Opportunities》&#xff0c;作者是Hanyue Xu, Kah Phooi Seng, Li Minn Ang, 和 Jeremy Smith。论文发表在IEEE Access期刊上&#xff0c;接收日期为2…...

滑动窗口算法—最小覆盖子串

题目 ”最小覆盖子串“问题&#xff0c;难度为Hard&#xff0c;题目如下&#xff1a; 给你两个字符串 S 和 T&#xff0c;请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串&#xff0c;则算法返回空串&#xff0c;如果存在这样一个子串&#xff0c;则可…...

应用案例|开源 PolarDB-X 在互联网安全场景的应用实践

背景介绍 中盾数科集团始创于2012年&#xff0c;是由网络安全服务而发展起来的科技型、多元化的企业集团。旗下包括网络安全服务、信创一体化服务、箱式液冷、区块链、位置服务、视觉服务等六大板块&#xff0c;业务覆盖湖南、甘肃、贵州等多个省份。 业务挑战 中盾集团基于A…...

【大数据】MapReduce的“内存增强版”——Spark

【大数据】MapReduce的“内存增强版”——Spark 文章脉络 Spark架构 Spark-core SparkConf 和 SparkContext RDD Spark集群 Spark-sql 在大数据时代&#xff0c;数据处理和分析成为企业竞争的重要手段。Hadoop作为大数据处理的基石&#xff0c;其核心组件MapReduce在众多…...

o1模型:引领AI技术在STEM领域的突破与应用

o1模型是OpenAI最新推出的大型语言模型&#xff0c;它在多个领域展现出了卓越的能力&#xff0c;被认为是AI技术发展的一个重要里程碑。以下是对o1模型的详细介绍和分析&#xff1a; o1模型的简介和性能评估 o1模型在物理、化学、生物学等领域的基准任务上达到了博士生水平&…...

数据库系统 第57节 数据库迁移

数据库迁移是一个复杂的过程&#xff0c;涉及到将数据从一个数据库系统转移到另一个数据库系统。这个过程通常需要仔细规划和执行&#xff0c;以确保数据的完整性和可用性。以下是数据库迁移的一些关键方面&#xff1a; 数据迁移工具&#xff1a; 这些工具可以帮助自动化迁移过…...

【主机入侵检测】Wazuh规则详解

前言 Wazuh 规则是一组用XML格式编写的条件&#xff0c;它们定义了应该如何解释日志数据。这些规则由Wazuh Manager使用&#xff0c;用于在日志消息中检测特定的模式或行为&#xff0c;并相应地生成警报或响应。它们在威胁检测中扮演着至关重要的角色&#xff0c;因为它们允许系…...

redis有序集合写入和求交集的速度

背景 团队小伙伴做了一个需求。大概的需求是有很多的图片作品&#xff0c;图片作品有一些类别&#xff0c;每个人进入到每个类别的作品业&#xff0c;根据权重优先查看权重最高的的作品&#xff0c;权重大概是基于每个人对该作品的浏览计算&#xff0c;浏览过的作品放在最后展…...

微服务之服务注册与发现:Etcd、Zookeeper、Consul 与 Nacos 比较

在微服务架构中&#xff0c;服务注册与发现是实现服务动态管理和负载均衡的关键。本文将对四款主流的服务注册与发现工具——Etcd、Zookeeper、Consul、Nacos进行深入对比&#xff0c;从功能、性能、一致性、生态集成、应用场景等多个维度展开分析&#xff0c;帮助您选择最适合…...

桥接模式详解和分析JDBC中的应用

&#x1f3af; 设计模式专栏&#xff0c;持续更新中&#xff0c; 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 桥接模式 文章目录 桥接模式桥接模式的四个核心组成&#xff1a…...

【python - 函数】

一、交互式会话 在与 Python 的交互式会话中&#xff0c;你可以在提示符 >>> 后键入一些 Python 代码&#xff0c;Python 解释器会读取并执行你键入的各种命令。 要启动交互式会话&#xff0c;请在终端 (Mac/Unix/Linux) 中键入 python3 或在 Windows 中打开 Python…...

scipy中稀疏矩阵特征值问题概述

在Python的scipy库中&#xff0c;这三种算法——ARPACK、LOBPCG、和AMG——都是用于求解稀疏矩阵特征值问题的数值方法。它们各自有不同的特性和适用场景&#xff0c;以下是详细说明&#xff1a; 1. ARPACK (Arnoldi Package) ARPACK&#xff08;Arnoldi Package&#xff09;…...

浅谈线性表——队列

文章目录 一、什么是队列&#xff1f;二、队列底层三、自我实现一个队列3.1、链式存储3.1.1、单向链表实现队列的实现代码3.1.2、双向链表实现队列的实现代码 3.2、顺序存储3.2.1、循环队列的实现代码 一、什么是队列&#xff1f; 队列是只允许在一端进行插入数据操作&#xf…...

2-94 基于matlab的最佳维纳滤波器的盲解卷积算法

基于matlab的最佳维纳滤波器的盲解卷积算法。维纳滤波将地震子波转换为任意所需要的形态。维纳滤波不同于反滤波&#xff0c;它是在最小平方的意义上为最 佳。基于最佳纳滤波理论的滤波器算法是莱文逊(Wiener—Levinson)算法。程序提供了4种子波和4种期望输出&#xff1a;零延迟…...

【提示词】浅谈GPT等大模型中的Prompt

Prompt是人工智能&#xff08;AI&#xff09;提示词&#xff0c;是一种利用自然语言来指导或激发人工智能模型完成特定任务的方法。在AI语境中&#xff0c;Prompt是一种自然语言输入&#xff0c;通常指的是向模型提出的一个请求或问题&#xff0c;这个请求或问题的形式和内容会…...

最强AI照片说话Windows一体包下载地址,口型合成音频驱动图片,免安装,下载即用

照片数字一键整合包&#xff1a;点击下载 一键安装包&#xff0c;简单一键启动&#xff0c;即刻使用&#xff0c;秒级体验。 目前效果最好的音频驱动图片说话的软件&#xff0c;比sadtalker、MuseTalk更清晰&#xff0c;效果更好&#xff0c;可以作为DID heygen的开源平替。原…...

3步实现专业级AI换脸:roop-unleashed创新方案指南

3步实现专业级AI换脸&#xff1a;roop-unleashed创新方案指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 在数字创意飞速发展的今天&#xff0c;AI换脸…...

别再为嵌入式设备大内存发愁了!手把手教你用CMA(连续内存分配器)搞定Linux视频编解码缓冲区

嵌入式多媒体开发中的连续内存优化实战&#xff1a;CMA技术深度解析 在嵌入式多媒体开发领域&#xff0c;视频编解码、图像处理等任务对内存管理提出了严苛要求。当你在树莓派上部署视频监控系统&#xff0c;或在工业摄像头中实现实时H.264编码时&#xff0c;是否经常遇到这样的…...

基于RAG的Obsidian智能插件:用AI对话重塑个人知识管理

1. 项目概述&#xff1a;当笔记遇上AI&#xff0c;一个插件如何重塑知识管理最近在折腾我的Obsidian知识库时&#xff0c;发现了一个让我眼前一亮的插件&#xff1a;Smart2Brain。这名字起得挺有意思&#xff0c;“Smart to Brain”&#xff0c;直译过来就是“从智能到大脑”。…...

终极指南:如何为你的Mac鼠标安装强大定制功能

终极指南&#xff1a;如何为你的Mac鼠标安装强大定制功能 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款革命性的开源工具…...

从GitHub克隆到点亮LED:手把手教你用Ubuntu编译调试别人的STM32工程

从GitHub克隆到点亮LED&#xff1a;手把手教你用Ubuntu编译调试别人的STM32工程 在开源硬件社区&#xff0c;GitHub上每天都有大量优秀的STM32项目被分享——从智能家居控制器到四轴飞行器飞控系统。但当开发者满怀期待地git clone后&#xff0c;却常常在第一步"编译通过&…...

终极ThinkPad风扇控制指南:告别噪音,拥抱静音高效

终极ThinkPad风扇控制指南&#xff1a;告别噪音&#xff0c;拥抱静音高效 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾经因为ThinkPad风扇的"直升机起…...

车载以太网之要火系列 - 第46篇:郭大侠学SOME/IP (offer Service):启动时快稍后慢,断断续续哥还在

写在开篇蓉儿继续挖坑上回说到&#xff0c;郭靖搞清楚了Offer Service的基本原理——服务端广播“我会啥&#xff0c;我在这”&#xff0c;TTL告诉客户端有效期。郭靖合上笔记本&#xff0c;突然皱起眉头&#xff1a;“蓉儿&#xff0c;我有个问题——如果每个ECU都每隔1.5秒发…...

智谱AI GLM-5V-Turbo:视觉生成代码的技术革命与实战架构

摘要:2026年5月,智谱AI联合清华大学发布了GLM-5V-Turbo多模态编程基座模型,在Design2Code基准测试中以94.8分的成绩超越Claude Opus的77.3分,实现了从"文本生成代码"到"视觉生成代码"的范式跃迁。本文深入解析该模型的核心技术架构——CogViT视觉编码器…...

Otter多模态大模型实战:从架构解析到部署应用的完整指南

1. 项目概述&#xff1a;当多模态大模型学会“看”与“说”最近在开源社区里&#xff0c;一个名为Otter的多模态大模型项目引起了我的注意。它来自EvolvingLMMs-Lab&#xff0c;这个实验室的名字就很有意思&#xff0c;“Evolving LMMs”—— 进化中的大型多模态模型。Otter 这…...

终极虚拟显示器解决方案:ParsecVDisplay完全指南

终极虚拟显示器解决方案&#xff1a;ParsecVDisplay完全指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd ParsecVDisplay是一款基于Parsec虚拟显示驱动&#xff08;VDD&#x…...