【C++初学】C++核心编程技术详解(二):类与继承

  1. 函数提高
    3.1 函数默认参数
    函数的形参可以有默认值,调用时可以省略这些参数。
    示例代码:
int func(int a, int b = 10, int c = 10) {return a + b + c;
}int main() {cout << "ret = " << func(20, 20) << endl;cout << "ret = " << func(100) << endl;system("pause");return 0;
}

在这里插入图片描述

3.2 函数占位参数

占位参数在函数声明中占位,调用时必须提供值。
示例代码:

void func(int a, int) {cout << "this is func" << endl;
}int main() {func(10, 10); // 占位参数必须提供值system("pause");return 0;
}

在这里插入图片描述

3.3 函数重载

函数重载允许函数名相同,但参数类型、个数或顺序不同。
示例代码:

void func() {cout << "func 的调用!" << endl;
}void func(int a) {cout << "func (int a) 的调用!" << endl;
}void func(double a) {cout << "func (double a)的调用!" << endl;
}void func(int a, double b) {cout << "func (int a ,double b) 的调用!" << endl;
}int main() {
func();
func(10);
func(3.14);
func(10, 3.14);
func(3.14, 10);
system("pause");
return 0;
}

在这里插入图片描述

void func(int& a)
{cout << "func(int &a)调用" << endl;
}void func(const int& a)
{cout << "func(const int &a)调用" << endl;
}void func2(int a, int b = 10)
{cout << "func2(int a , int b = 10)调用" << endl;
}void func2(int a)
{cout << "func2(int a)调用" << endl;
}
int main()
{int a = 10;func(a);func(10);//func2(10);system("pause");return 0;
}

在这里插入图片描述
在这里插入图片描述

4 类和对象

面向对象的三大特性是封装继承多态。类是对象的抽象,对象是类的实例。

4.1 封装

封装是将属性和行为作为一个整体,表现生活中的事物,并加以权限控制。

4.1.1 封装的意义

示例代码:


// 圆类
const double PI = 3.14;
class Circle {
public:int m_r; // 半径double calculateZC() { // 计算周长return 2 * PI * m_r;}
};int main() {Circle c1;c1.m_r = 10;cout << "圆的周长为: " << c1.calculateZC() << endl;system("pause");return 0;
}

在这里插入图片描述
案例2:

#include <string>
class Student
{
public:void setName(string name){m_name = name;}void setID(int id){m_id = id;}void showStudent(){cout << "name: " << m_name << "id: " << m_id << endl;}
public:string m_name;int m_id;
};
int main()
{Student stu;stu.setName("德玛西亚");stu.setID(250);stu.showStudent();system("pause");return 0;
}

在这里插入图片描述

4.1.2 struct 和 class 的区别

struct 默认权限为公共。
class 默认权限为私有。
示例代码:

class c1   //默认私有
{int m_A;};
struct c2 //默认公共
{int m_A;};
int main()
{c1 c1;c1.m_A = 10;//errc2 c2;c2.m_A = 10;system("pause");return 0;
}

在这里插入图片描述

4.1.3 成员属性设置为私有

将成员属性设置为私有可以控制读写权限,并检测数据有效性。
示例代码:

class Person {
public:void setName(string name) {m_Name = name;}string getName() {return m_Name;}int getAge() {return m_Age;}void setAge(int age) {if (age < 0 || age > 150) {cout << "你个老妖精!" << endl;return;}m_Age = age;}void setLover(string lover) {m_Lover = lover;}
private:string m_Name; // 姓名int m_Age; // 年龄string m_Lover; // 情人
};int main() {Person p;p.setName("张三");cout << "姓名: " << p.getName() << endl;p.setAge(50);cout << "年龄: " << p.getAge() << endl;p.setLover("苍井");system("pause");return 0;
}

在这里插入图片描述

4.2 对象的初始化和清理

构造函数和析构函数是C++中用于对象初始化和清理的重要机制。

4.2.1 构造函数和析构函数

构造函数用于对象创建时的初始化,析构函数用于对象销毁前的清理。
示例代码:

class Person {
public:Person() {cout << "Person的构造函数调用" << endl;}~Person() {cout << "Person的析构函数调用" << endl;}
};void test01() {Person p;
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

4.2.2 构造函数的分类及调用
构造函数可以分为有参构造和无参构造,还可以分为普通构造和拷贝构造。
示例代码:

class Person {
public:Person() {cout << "无参构造函数!" << endl;}Person(int a) {age = a;cout << "有参构造函数!" << endl;}Person(const Person& p) {age = p.age;cout << "拷贝构造函数!" << endl;}~Person() {cout << "析构函数!" << endl;}
public:int age;
};void test01() {Person p; // 调用无参构造函数
}void test02() {Person p1(10); // 调用有参构造函数Person p2 = Person(10); // 调用拷贝构造函数Person p3 = p1; // 调用拷贝构造函数
}int main() {test01();test02();system("pause");return 0;
}

在这里插入图片描述

4.2.3 拷贝构造函数调用时机

拷贝构造函数在以下三种情况下被调用:
使用一个已经创建完毕的对象来初始化一个新对象。
以值传递的方式给函数参数传值。
以值方式返回局部对象。
示例代码:

class Person
{
public:Person(){cout << "无参构造函数" << endl;}Person(int a){age = a;cout << "有参构造函数" << endl;}Person(const Person& p){cout << "拷贝构造函数" << endl;age = p.age;}~Person(){cout << "析构函数" << endl;}
public:int age;
};void test01()
{Person p;
}void test02()
{Person p1(10);Person p2 = Person(10);Person p3 = Person(p2);Person p4 = 10;Person p5 = p4;
}
int main()
{test01();test02();system("pause");return 0;
}

在这里插入图片描述

class Person
{
public:Person(){cout << "无参构造函数" << endl;mAge = 0;}Person(int age){cout << "有参构造函数" << endl;}Person(const Person& p){cout << "拷贝构造函数" << endl;mAge = p.mAge;}~Person(){cout << "析构函数" << endl;}
public:int mAge;
};void test01()
{Person man(100);Person newman(man);Person newman2 = man;
}void dowork(Person p1) {};
void test02()
{Person p;dowork(p);
}Person dowork2()
{Person p1;cout << (int*)&p1 << endl;return p1;
}void test03()
{Person p = dowork2();cout << (int*)&p << endl;
}
int main()
{//test01();//test02();test03();system("pause");return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.4 构造函数调用规则

如果用户定义了有参构造函数,编译器不会再提供默认无参构造函数,但会提供默认拷贝构造函数。
示例代码:

class Person {
public:Person() {cout << "无参构造函数!" << endl;}Person(int a) {age = a;cout << "有参构造函数!" << endl;}Person(const Person& p) {age = p.age;cout << "拷贝构造函数!" << endl;}~Person() {cout << "析构函数!" << endl;}
public:int age;
};void test01() {Person p1(18);Person p2(p1); // 调用拷贝构造函数cout << "p2的年龄为: " << p2.age << endl;
}void test02() {Person p1; // 如果用户没有提供默认构造函数,会报错Person p2(10); // 用户提供的有参构造函数
}int main() {test01();test02();system("pause");return 0;
}

在这里插入图片描述
在这里插入图片描述

4.2.5 深拷贝与浅拷贝

浅拷贝只是简单地赋值,而深拷贝会在堆区重新申请空间。
示例代码:

class Person {
public:Person() {cout << "无参构造函数!" << endl;}Person(int age, int height) {cout << "有参构造函数!" << endl;m_age = age;m_height = new int(height);}Person(const Person& p) {cout << "拷贝构造函数!" << endl;m_age = p.m_age;m_height = new int(*p.m_height); // 深拷贝}~Person() {cout << "析构函数!" << endl;if (m_height != NULL) {delete m_height;}}
public:int m_age;int* m_height;
};void test01() {Person p1(18, 180);Person p2(p1);cout << "p1的年龄: " << p1.m_age << " 身高: " << *p1.m_height << endl;cout << "p2的年龄: " << p2.m_age << " 身高: " << *p2.m_height << endl;
}int main() {test01();system("pause");return 0;

在这里插入图片描述

4.2.6 初始化列表

初始化列表用于在构造函数中初始化成员变量。
示例代码:

class Person {
public:Person(int a, int b, int c) : m_A(a), m_B(b), m_C(c) {cout << "构造函数调用" << endl;}void PrintPerson() {cout << "mA:" << m_A << endl;cout << "mB:" << m_B << endl;cout << "mC:" << m_C << endl;}
private:int m_A;int m_B;int m_C;
};int main() {Person p(1, 2, 3);p.PrintPerson();system("pause");return 0;
}

在这里插入图片描述

4.2.7 类对象作为类成员

类中的成员可以是另一个类的对象。
示例代码:

class Phone {
public:Phone(string name) {m_PhoneName = name;cout << "Phone构造" << endl;}~Phone() {cout << "Phone析构" << endl;}string m_PhoneName;
};class Person {
public:Person(string name, string pName) : m_Name(name), m_Phone(pName) {cout << "Person构造" << endl;}~Person() {cout << "Person析构" << endl;}void playGame() {cout << m_Name << " 使用" << m_Phone.m_PhoneName << " 牌手机! " << endl;}string m_Name;Phone m_Phone;
};void test01() {Person p("张三", "苹果X");p.playGame();
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

4.2.8 静态成员

静态成员变量和静态成员函数是类的所有对象共享的。
示例代码:

class Person {
public:static int m_A; // 静态成员变量static void func() {cout << "func调用" << endl;m_A = 100;}int m_B; // 非静态成员变量
};int Person::m_A = 10;void test01() {Person p1;p1.func();Person::func();cout << "p1.m_A = " << p1.m_A << endl;cout << "m_A = " << Person::m_A << endl;
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

class Person
{
public:static int m_A;
private:static int m_B;};
int Person::m_A = 10;
int Person::m_B = 10;void test01()
{Person p1;p1.m_A = 100;cout << "p1.m_A = " << p1.m_A << endl;Person p2;p2.m_A = 200;cout << "p1.m_A = " << p1.m_A << endl;cout << "p2.m_A = " << p2.m_A << endl;cout << "m_A = " << Person::m_A << endl;}
int main()
{test01();system("pause");return 0;
}

在这里插入图片描述

4.3 C++对象模型和this指针

成员变量和成员函数分开存储
在这里插入图片描述
this指针指向被调用的成员函数所属的对象
示例代码:

class Person {
public:Person(int age) {this->age = age;}Person& PersonAddPerson(Person p) {this->age += p.age;return *this;}int age;
};void test01() {Person p1(10);cout << "p1.age = " << p1.age << endl;Person p2(10);p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);cout << "p2.age = " << p2.age << endl;
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述
空指针访问成员数组
在这里插入图片描述

4.4 友元

友元可以访问类的私有成员。

4.4.1 全局函数做友元

示例代码:

class Building {friend void goodGay(Building *building);string m_BedRoom; // 卧室
public:Building() {m_BedRoom = "卧室";}string m_SittingRoom; // 客厅
};void goodGay(Building *building) {cout << "好基友正在访问: " << building->m_SittingRoom << endl;cout << "好基友正在访问: " << building->m_BedRoom << endl;
}void test01() {Building b;goodGay(&b);
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

4.4.2 类做友元

示例代码:

class Building {friend class goodGay;string m_BedRoom; // 卧室
public:Building() {m_BedRoom = "卧室";}string m_SittingRoom; // 客厅
};class goodGay {
public:void visit(Building *building) {cout << "好基友正在访问" << building->m_SittingRoom << endl;cout << "好基友正在访问" << building->m_BedRoom << endl;}
};void test01() {Building b;goodGay gg;gg.visit(&b);
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

4.4.3 成员函数做友元

示例代码:

class Building {friend void goodGay::visit(Building *building);string m_BedRoom; // 卧室
public:Building() {m_BedRoom = "卧室";}string m_SittingRoom; // 客厅
};class goodGay {
public:void visit(Building *building) {cout << "好基友正在访问" << building->m_SittingRoom << endl;cout << "好基友正在访问" << building->m_BedRoom << endl;}
};void test01() {Building b;goodGay gg;gg.visit(&b);
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

4.5 运算符重载

运算符重载可以为自定义数据类型重新定义运算符的行为。

4.5.1 加号运算符重载

示例代码:

class Person
{
public:Person() {};Person(int a, int b){this->m_A = a;this->m_B = b;}Person operator+(const Person& p){Person temp;temp.m_A = this->m_A + p.m_A;temp.m_B = this->m_B + p.m_B;return temp;}
public:int m_A;int m_B;};Person operator+(const Person& p2, int val)
{Person temp;temp.m_A = p2.m_A + val;temp.m_B = p2.m_B + val;return temp;
}void test()
{Person p1(10, 10);Person p2(20, 20);Person p3 = p2 + p1;cout << "mA:" << p3.m_A << "mB:" << p3.m_B << endl;Person p4 = p3 + 10;cout << "mA:" << p4.m_A << "mB:" << p4.m_B << endl;}
int main()
{test();system("pause");return 0;
}

在这里插入图片描述

4.5.2 左移运算符重载

示例代码:

class Person {friend ostream& operator<<(ostream& out, Person& p);
public:Person(int a, int b) {this->m_A = a;this->m_B = b;}
private:int m_A;int m_B;
};ostream& operator<<(ostream& out, Person& p) {out << "a:" << p.m_A << " b:" << p.m_B;return out;
}void test() {Person p1(10, 20);cout << p1 << "hello world" << endl;
}int main() {test();system("pause");return 0;
}

在这里插入图片描述

4.5.3 递增运算符重载

示例代码:

class MyInteger {friend ostream& operator<<(ostream& out, MyInteger myint);
public:MyInteger() {m_Num = 0;}MyInteger& operator++() {m_Num++;return *this;}MyInteger operator++(int) {MyInteger temp = *this;m_Num++;return temp;}
private:int m_Num;
};ostream& operator<<(ostream& out, MyInteger myint) {out << myint.m_Num;return out;
}void test01() {MyInteger myInt;cout << ++myInt << endl;cout << myInt << endl;
}void test02() {MyInteger myInt;cout << myInt++ << endl;cout << myInt << endl;
}int main() {test01();test02();system("pause");return 0;
}

在这里插入图片描述

4.5.4 赋值运算符重载

示例代码:

class Person {
public:Person(int age) {m_Age = new int(age);}Person& operator=(Person &p) {if (m_Age !=NULL) {
delete m_Age;
m_Age = NULL;
}
m_Age = new int(*p.m_Age);
return *this;
}
~Person() {
if (m_Age != NULL) {
delete m_Age;
m_Age = NULL;
}
}
int *m_Age;
};
void test01() {
Person p1(18);
Person p2(20);
Person p3(30);
p3 = p2 = p1;
cout << "p1的年龄为:" << *p1.m_Age << endl;
cout << "p2的年龄为:" << *p2.m_Age << endl;
cout << "p3的年龄为:" << *p3.m_Age << endl;
}
int main() {
test01();
system("pause");
return 0;
}

在这里插入图片描述

4.5.5 关系运算符重载

示例代码:

class Person {
public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}bool operator==(Person & p) {if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) {return true;} else {return false;}}bool operator!=(Person & p) {if (this->m_Name == p.m_Name && this->m_Age == p.m_Age) {return false;} else {return true;}}string m_Name;int m_Age;
};void test01() {Person a("孙悟空", 18);Person b("孙悟空", 18);if (a == b) {cout << "a和b相等" << endl;} else {cout << "a和b不相等" << endl;}if (a != b) {cout << "a和b不相等" << endl;} else {cout << "a和b相等" << endl;}
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

4.5.6 函数调用运算符重载

示例代码:

class MyPrint {
public:void operator()(string text) {cout << text << endl;}
};class MyAdd {
public:int operator()(int v1, int v2) {return v1 + v2;}
};void test01() {MyPrint myFunc;myFunc("hello world");
}void test02() {MyAdd add;int ret = add(10, 10);cout << "ret = " << ret << endl;cout << "MyAdd()(100,100) = " << MyAdd()(100, 100) << endl;
}int main() {test01();test02();system("pause");return 0;
}

在这里插入图片描述

5. 继承

继承是面向对象的三大特性之一,允许子类继承父类的成员。

5.1 继承的基本语法

示例代码:

class BasePage {
public:void header() {cout << "首页、公开课、登录、注册...(公共头部)" << endl;}void footer() {cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;}void left() {cout << "Java,Python,C++...(公共分类列表)" << endl;}
};class Java : public BasePage {
public:void content() {cout << "JAVA学科视频" << endl;}
};class Python : public BasePage {
public:void content() {cout << "Python学科视频" << endl;}
};class CPP : public BasePage {
public:void content() {cout << "C++学科视频" << endl;}
};void test01() {cout << "Java下载视频页面如下: " << endl;Java ja;ja.header();ja.footer();ja.left();ja.content();cout << "--------------------" << endl;cout << "Python下载视频页面如下: " << endl;Python py;py.header();py.footer();py.left();py.content();cout << "--------------------" << endl;cout << "C++下载视频页面如下: " << endl;CPP cp;cp.header();cp.footer();cp.left();cp.content();
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

5.2 继承方式

继承方式有三种:公共继承、保护继承和私有继承。
示例代码:

class Base1 {
public:int m_A;
protected:int m_B;
private:int m_C;
};class Son1 : public Base1 {
public:void func() {m_A; // 可访问 public 权限m_B; // 可访问 protected 权限// m_C; // 不可访问}
};class Base2 {
public:int m_A;
protected:int m_B;
private:int m_C;
};class Son2 : protected Base2 {
public:void func() {m_A; // 可访问 protected 权限m_B; // 可访问 protected 权限// m_C; // 不可访问}
};class Base3 {
public:int m_A;
protected:int m_B;
private:int m_C;
};class Son3 : private Base3 {
public:void func() {m_A; // 可访问 private 权限m_B; // 可访问 private 权限// m_C; // 不可访问}
};class GrandSon3 : public Son3 {
public:void func() {// Son3 是私有继承,所以继承 Son3 的属性在 GrandSon3 中都无法访问到// m_A;// m_B;// m_C;}
};

5.3 继承中的对象模型

父类中的私有成员也会被子类继承,但无法直接访问。
示例代码:

class Base {
public:int m_A;
protected:int m_B;
private:int m_C;
};class Son : public Base {
public:int m_D;
};void test01() {cout << "sizeof Son = " << sizeof(Son) << endl;
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

5.4 继承中构造和析构顺序
创建子类对象时,先调用父类的构造函数,再调用子类的构造函数。析构顺序相反。
示例代码:

class Base {
public:Base() {cout << "Base构造函数!" << endl;}~Base() {cout << "Base析构函数!" << endl;}
};class Son : public Base {
public:Son() {cout << "Son构造函数!" << endl;}~Son() {cout << "Son析构函数!" << endl;}
};void test01() {Son s;
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

5.5 继承同名成员处理方式
子类与父类出现同名成员时,可以通过作用域区分。
示例代码:

class Base {
public:void func() {cout << "Base - func()调用" << endl;}void func(int a) {cout << "Base - func(int a)调用" << endl;}int m_A;
};class Son : public Base {
public:void func() {cout << "Son - func()调用" << endl;}int m_A;
};void test01() {Son s;cout << "Son下的m_A = " << s.m_A << endl;cout << "Base下的m_A = " << s.Base::m_A << endl;s.func();s.Base::func();s.Base::func(10);
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

5.6 继承同名静态成员处理方式

静态成员同名处理方式与非静态成员相同。
示例代码:

class Base {
public:static void func() {cout << "Base - static void func()" << endl;}static void func(int a) {cout << "Base - static void func(int a)" << endl;}static int m_A;
};int Base::m_A = 100;class Son : public Base {
public:
static void func() {
cout << "Son - static void func()" << endl;
}
static int m_A;
};
int Son::m_A = 200;
void test01() {
cout << "通过对象访问: " << endl;
Son s;
cout << "Son 下 m_A = " << s.m_A << endl;
cout << "Base 下 m_A = " << s.Base::m_A << endl;
cout << "通过类名访问: " << endl;
cout << "Son 下 m_A = " << Son::m_A << endl;
cout << "Base 下 m_A = " << Son::Base::m_A << endl;
}
void test02() {
cout << "通过对象访问: " << endl;
Son s;
s.func();
s.Base::func();
cout << "通过类名访问: " << endl;
Son::func();
Son::Base::func();
Son::Base::func(100);
}
int main() {
test01();
test02();
system("pause");
return 0;
}

在这里插入图片描述

5.7 多继承语法

C++允许一个类继承多个类。

示例代码:

class Base1 {
public:Base1() {m_A = 100;}int m_A;
};class Base2 {
public:Base2() {m_A = 200;}int m_A;
};class Son : public Base2, public Base1 {
public:Son() {m_C = 300;m_D = 400;}int m_C;int m_D;
};void test01() {Son s;cout << "sizeof Son = " << sizeof(s) << endl;cout << s.Base1::m_A << endl;cout << s.Base2::m_A << endl;
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

5.8 菱形继承

菱形继承是指两个派生类继承同一个基类,而另一个类又同时继承这两个派生类。
示例代码:

class Animal {
public:int m_Age;
};class Sheep : virtual public Animal {};class Tuo : virtual public Animal {};class SheepTuo : public Sheep, public Tuo {};void test01() {SheepTuo st;st.Sheep::m_Age = 100;st.Tuo::m_Age = 200;cout << "st.Sheep::m_Age = " << st.Sheep::m_Age << endl;cout << "st.Tuo::m_Age = " << st.Tuo::m_Age << endl;cout << "st.m_Age = " << st.m_Age << endl;
}int main() {test01();system("pause");return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Next.js + Droplet:高并发视频内容平台部署与优化扩展实战

在构建在线服务时&#xff0c;无论你是开发者还是企业技术负责人&#xff0c;扩展性和稳定性始终是绕不开的核心挑战。尤其在涉及高并发访问、大量数据传输和持续内容分发的场景中&#xff0c;系统架构的设计直接决定了用户体验与业务成效。 本文将以视频点播&#xff08;Video…

Python爬虫第13节-解析库pyquery 的使用

目录 前言 一、pyquery 初始化 1.1 字符串初始化 1.2 URL 初始化 1.3 文件初始化 二、基本 CSS 选择器 三、pyquery 查找节点 3.1 子节点 3.2 父节点 3.3 兄弟节点 四、遍历 五、获取信息 5.1 获取属性 5.2 获取文本 六、节点操作 6.1 addClass 和 removeClass…

【Hadoop入门】Hadoop生态之Pig简介

1 什么是Pig&#xff1f; 在大数据分析领域&#xff0c;Apache Pig是一个不可忽视的重要工具。Pig是Apache Hadoop生态系统中的一个高级数据分析平台&#xff0c;它提供了一种称为Pig Latin的脚本语言&#xff0c;用于简化大规模数据集的并行处理。Pig的核心思想是将复杂的数据…

python 语言 设计模式

python 语言 设计模式 设计模式是指在软件开发过程中,针对反复出现的问题所总结归纳出的通用解决方案。以下是一些常见的Python语言设计模式: 目录 python 语言 设计模式创建型模式结构型模式行为型模式创建型模式 单例模式 定义:保证一个类只有一个实例,并提供一个全局访…

QT QML布局

一、‌锚点布局(Anchors) 通过定义元素与其他元素或父容器的锚点关系实现定位,支持动态调整和边距控制‌。 Rectangle {anchors.left: parent.left // 左对齐父容器anchors.top: parent.top // 顶部对齐父容器anchors.margins: 10 // 统一设置四周边距width: …

【力扣03】无重复字符的最长子串

题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释:…

一文介绍阿里32B推理模型

什么是QwQ-32B&#xff1f; QwQ-32B并非普通的聊天机器人模型&#xff0c;而是推理模型。推理模型专注于逻辑拆解问题、分步推导&#xff0c;并输出结构化答案。 通过下面的示例&#xff0c;我们可以直观看到QwQ-32B的思考过程&#xff1a; qwq-32b思考过程 如果你需要写作辅…

AutoGen深度解析:从核心架构到多智能体协作的完整指南

AutoGen是微软推出的一个革命性多智能体(Multi-Agent)框架&#xff0c;它通过模块化设计和灵活的对话机制&#xff0c;极大地简化了基于大型语言模型(LLM)的智能体系统开发。本文将深入剖析AutoGen的两个核心模块——core基础架构和agentchat多智能体对话系统&#xff0c;带您全…

HTML的svg元素

<svg>元素 <svg>是一种用于描述二维矢量图形的 XML 格式&#xff0c;可以直接嵌入 HTML 文档中。 <svg>基本用法 <svg>的几种基本用法,包括圆形&#xff0c;正方形&#xff0c;三角形&#xff0c;直线 &#xff0c;折线等 <body><svg widt…

Qt 子项目依赖管理:从原理到实践的最佳分析:depends还是 CONFIG += ordered

1. 问题背景 在Qt项目开发中&#xff0c;当一个工程包含多个子项目&#xff08;如库、插件、测试模块&#xff09;时&#xff0c;如何正确管理它们的构建顺序和依赖关系&#xff1f; 如&#xff1a; 在开发一个包含核心库&#xff08;core&#xff09;、GUI模块&#xff08;g…

业务幂等性技术架构体系-接口幂等

接口幂等 对于幂等的考虑&#xff0c;主要解决两点前后端交互与服务间交互。这两点有时都要考虑幂等性的实现。从前端的思路解决 的话&#xff0c;主要有三种&#xff1a;前端防重、PRG模式、Token机制。 前端防重 通过前端防重保证幂等是最简单的实现方式&#xff0c;前端相关…

AI工具导航大全 | 2025精选版(持续更新)

&#x1f680; AI工具导航大全 | 2025精选版&#xff08;持续更新&#xff09; 更新日期&#xff1a;2025-04-11 | 适用场景&#xff1a;学术研究 | 办公提效 | 创意设计 | 开发编程 数据来源&#xff1a;综合高校实验室、企业实践及开发者社区推荐 &#x1f50d; 导航目录 &…

驱动-内核空间和用户空间数据交换

内核空间与用户控件数据交换 前面了解的字符设备中对 file_operations 结构体的进行了填充&#xff0c; 该 结构体的每一个成员都对应着一个系统调用&#xff0c; 例如 read、 write 等&#xff0c; 在字符设备相关的文章中有实验过对 调用函数进行了标志打印&#xff0c; 并没…

5G_WiFi_CE_DFS

目录 一、规范要求 1、法规目录 2、定义 3、运行模式 4、主/从设备相关的运行行为及具体的动态频率选择&#xff08;DFS&#xff09;要求 5、产品角色确定测试项目 6、测试项目 测试项1&#xff1a;信道可用性检查&#xff08;Channel Availability Check&#xff09; …

Devops之GitOps:什么是Gitops,以及它有什么优势

GitOps 定义 GitOps 是一种基于版本控制系统&#xff08;如 Git&#xff09;的运维实践&#xff0c;将 Git 作为基础设施和应用程序的唯一事实来源。通过声明式配置&#xff0c;系统自动同步 Git 仓库中的期望状态到实际运行环境&#xff0c;实现持续交付和自动化运维。其核心…

【蓝桥杯】单片机设计与开发,第十二届

/*头文件声明区*/ #include <STC15F2K60S2.H>//单片机寄存器头文件 #include <init.h>//初始化底层驱动头文件 #include <led.h>//led,蜂鸣器,继电器底层驱动头文件 #include <key.h>//按键底层驱动头文件 #include <seg.h>//数码管底层驱动头…

Vue3连接MQTT作为客户端

先下载依赖 npx --yes --registry https://registry.npmmirror.com npm install mqtt 在src的api创建 mes.js // 导入axios import axios from axios;// 定义一个变量,记录公共的前缀, baseURL const baseURL http://localhost:8080; const instance axios.create({ base…

主服务器和子服务器之间通过NFS实现文件夹共享

背景&#xff1a; 子服务器想做一个备份服务器 但是之前有很多文件是上传到本地的&#xff0c;于是服务要从本地读取文件 但是在不在同一台服务器中&#xff0c;读取就会有问题&#xff0c;想 实现在两者之间创建一个共享文件夹 一 NFS挂载步骤&#xff1a; 在主服务器&#…

LeetCode算法题(Go语言实现)_39

题目 给定一个二叉树的根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 一、代码实现 type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode }func rightSideView(root *TreeNode) []int {i…

【AI提示词】长期主义助手提供规划支持

提示说明 长期主义是一种关注长期利益和持续学习的思维模式&#xff0c;帮助个人和组织在快速变化的环境中保持耐心和系统性思考。 提示词 # Role: Long-termist Assistant## Profile - language: 中文 - description: 长期主义是一种关注长期利益和持续学习的思维模式&…