Cpp-2

CPP已老?Herb Sutter开发CPP2,努力证明CPP的强大 这使您可以在任何现有的C++项目和构建系统中开始尝试Cpp2语法,只需将源文件从.cpp重命名为.cpp2并添加一个构建步骤,结果可以在每个C++20或更高版本的编译器和所有现有的C++工具(调试器、构建系统、sanitizer等)中直接使用,而无需进行任何更改。Cpp2旨在成为C++本身的另一种“皮肤”,只是一种更简单、更安全的编写普通C++类型/函数/对象的方式,以及在更简单的编译器和语法风格中尝试未来新标准C++功能的更快方法。例如,它没有自己的非标准不兼容模块/概念等,与标准C++功能竞争; 阅读详情

类与对象

/*
    类与对象:
        1.类是一种用户自定义的数据类型(函数,数据)
        2.类是具有相同的属性和行为的对象的集合
        3.类是对象的抽象,对象是类的具体
        4.对象:通过使用类类型定义的变量
*/

定义类

/*
    如何定义类?语法:

        class 类名
        {
            默认是私有的
                // 成员:1.数据  2.函数


            //访问权限修饰关键字
            public:        // 公有的
                // 成员:1.数据  2.函数

            private:    // 私有的(只允许当前类使用)
                // 成员:1.数据  2.函数

            protected:    // 被保护的(只允许当前类或子类使用)
                // 成员:1.数据  2.函数
        }
*/

定义对象

/*
    如何定义对象,语法:

        类名 对象名;

        e.g.    Sheep xiYangYang
*/

访问成员

#include <iostream>
using namespace std;

class Sheep
{
public:
    char name[32];

private:
    int age;

public:
    void eat()
    {
        cout << "让我们吃点草吧,咩!" << endl;
    }

    void speak();    // 函数声明

    void setAge(int num)
    {
        age = num;
    }

};

void Sheep::speak()        // 在类的外面实现
{
    cout << "我的年龄是" << age << "岁" << endl;
}



int main()
{
    Sheep xiYY;
    // xiYY.name = "喜羊羊";  这个是错误写法
    strcpy(xiYY.name, "喜羊羊");

    // xiYY.age = 8; 错误写法,私有属性无法直接访问!!
    xiYY.setAge(8);        // 通过使用函数接口

    xiYY.eat();
    xiYY.speak();
    cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;



    // 通过指针实现:
    Sheep* p;
    p = &xiYY;
    p->eat();
    p->speak();

    return 0;
}

/*
    了解:class 和 struct
        1.在 C语言里面,有 struct 没有 class
        2.在 C语言里面,struct 里面“不能有”函数
        3.在 C++  里面,struct 里面“可以有”函数
        4.在 C++  里面,我们可以用 struct 定义结构体,也可以用它定义类
        5.在 C++  里面,用 class 定义的类,它的成员默认访问权限是私有的
        而用 struct 定义类,它的成员默认访问权限是公有的,所以不太符合封装的思想
*/

String 类

/*
    String 是 C++ 中的字符串
    类似于C语言中的字符串数组
    里面包括许多方法,使用时需要额外包含<string>
*/
#include <iostream>
#include <string>    // 先预处理,下面才能使用 string
using namespace std;


int main()
{
    char ch;
    string str;

    str = "abc123";
    ch = str[2];    // 字母 c
    ch = str.at(1);    // 字母 b
    str.length();
    str.clear();
    str.empty();
    str == str;

    return 0;
}

构造函数

/*
    构造函数:
        1.是一种特殊的成员函数
        主要用来在创建对象时初始化对象,为对象的成员变量赋予初始值

        2.构造函数名和类名相同
        构造函数没有返回值类型,也没有返回值

        3.构造函数可以重载,需要满足函数重载的条件

        4.在创建一个新的对象的时候,会自动调用
        如果一个类中没有显式地给出构造函数,系统会自动的给出一个构造函数

        5.学会利用“成员初始化列表”,给成员初始化
*/
#include <iostream>
#include <string>
using namespace std;

class MyClass
{
public:
    int id;

private:
    int age;

public:
    MyClass();        // 无参构造函数
    MyClass(int n, int m);    // 含参构造函数
};

MyClass::MyClass()
{
    cout << "999" << endl;
}

MyClass::MyClass(int n, int m)
{
    cout << id << endl;
}



int main()
{
    MyClass obj_0;    // obj_0 或者 obj_0()    都能激活无参构造函数
    MyClass obj_1(5, 18);    // 实例化对象的同时,激活有参构造函数

    return 0;
}
#include <iostream>
#include <string>
using namespace std;

class MyClass
{
public:
    const int id;	// 注意!与C语言不同,在 C++ 中,const 是将被修饰的东西变成常量,即:不可改变
    const int num;

public:
    MyClass(int i) :id(i),num(5)    // 成员初始化列表
    {

    }

};


int main()
{
    MyClass obj(3);
    cout << obj.id << endl;
    cout << obj.num << endl;

    return 0;
}

析构函数

/*
    析构函数:
    1.是一种特殊的函数,主要作用是在对象生命周期结束时进行清理,系统可以自动调用析构函数
    2.析构函数可以主动通过对象调用,析构函数必须是公有属性下,在对象生命周期结束时会自动调用析构函数
    3.不是因为调用了析构函数导致生命周期结束,而是因为生命周期结束时会自动调用析构函数首先
*/
#include <iostream>
#include <string>
using namespace std;

class MyClass
{
public:
    MyClass();
    ~MyClass();    // 声明:析构函数

};
MyClass::MyClass()
{

}
MyClass::~MyClass()    // 析构函数
{
    cout << "析构" << endl;
}

int main()
{
    MyClass obj;    // 对象obj生命周期结束时,系统会自动调用析构函数

    // 对于堆区里面的内存空间,因为需要自己申请,自己释放,所以没释放前,析构函数不会执行
    MyClass* p = new MyClass;
    delete p;
    p = NULL;

    return 0;
}

拷贝构造

/*
    拷贝构造:
        1.拷贝构造是一种特殊的构造函数,通过“拷贝构造”函数完成一个复制的过程。
        2.特殊:参数是本类的对象的引用。
        3.先是构造函数,才有可能是拷贝构造函数。没写的话,系统给,将成员一一对应赋值,也可以自定义。
*/


#include <iostream>
#include <string>
using namespace std;

class MyClass
{
    MyClass(){}
    ~MyClass(){}
    MyClass(const MyClass& obj){}    // 拷贝构造函数的第一个参数是当前类的对象的引用
    MyClass(const MyClass& obj, int n){}
    MyClass(const MyClass& obj, int n,int m){}
};


int main()
{
    return 0;
}
/*
    调用时机:
        1.使用一个对象给另一个对象进行初始化
        2.使用一个对象构造另一个对象
        3.函数的参数是类的对象
        4.函数的返回值是类的对象
*/

#include <iostream>
#include <string>
using namespace std;

class Human
{
public:
    string m_name;
    int m_age;

public:
    void showInfo();
    // 下面的函数即使不写,也会默认存在
    Human();    // 构造函数
    Human(Human& obj);    // 拷贝构造函数
    ~Human();    // 析构

};

void Human::showInfo()
{
    cout << m_name << endl;
    cout << m_age << endl;
}

Human::Human()
{
    m_name = "KiKi[默认名]";
    m_age = 0;
}

Human::Human(Human& obj)
{
    m_name = obj.m_name;
    m_age = obj.m_age;
    cout << "执行了 Human(Human& obj) 函数" << endl;
}

Human::~Human()
{

}

void func_1(Human obj)    // 函数的参数是类的对象
{

}

Human func_2()
{
    Human obj;
    return obj;        // 函数的返回值是类的对象
}

int main()
{
    Human obj_0;
    obj_0.showInfo();

    cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n";

    obj_0.m_name = "小明";
    obj_0.m_age = 28;
    obj_0.showInfo();

    cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n";

    Human obj_1(obj_0);        // 等价于 Human obj_1 = obj_0;
    obj_1.showInfo();

    cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n";

    // 3.函数的参数是类的对象
    // 4.函数的返回值是类的对象
    func_1(obj_1);
    func_2();

    return 0;
}

/*
    浅拷贝与深拷贝:
        1.浅拷贝:默认的都是浅拷贝
        2.浅拷贝,无脑抄袭
        3.深拷贝:需要自己根据实际情况实现
        4.深拷贝:有点脑子
*/

this 指针

/*
    this 指针:
        1.this 指针是系统自动生成的,且隐藏的
        2.this 指针不是对象的一部分,作用域在类内部
        3.类的普通函数访问类的普通成员时,this 指针总是指向调用者对象 
*/

#include <iostream>
using namespace std;

class MyClass
{
    int num;

public:
    void setNum(int num)
    {
        this->num = num;
    }
    int getNum()
    {
        (*this).getNum();    // this 指针的灵活运用
        return num;
    }
};

int main()
{
    MyClass obj;
    obj.setNum(8);
    cout << obj.getNum() << endl;

    return 0;
}

static 成员

/*
    static(静态)关键字:
        1.静态成员分为“静态数据成员”和“静态函数成员”
        2.不管这个类实例化了多少个对象,这些对象都能够共享(类里面的)“静态区域”里面存的“静态数据”,即这些数据是共有财产
*/

#include <iostream>
using namespace std;

class MyClass
{
public:
    static int num;        // (静态数据成员)给初值的话,要在外面进行,如下
    MyClass();
    static void func();    // 静态函数成员
};

int MyClass::num = 0;    // 如上

void MyClass::func()
{
    cout << "func" << endl;
}

MyClass::MyClass()
{
    num++;        // 每创建一个对象,就记录一下
}

int main()
{
    MyClass obj_1;
    cout << obj_1.num << endl;

    MyClass obj_2;
    cout << obj_2.num << endl;

    MyClass obj_3;
    cout << obj_3.num << endl;

    MyClass::num;    // 因为数据 num 是在静态区域,所以还能通过类来访问

    // 静态函数成员的访问
    obj_3.func();
    MyClass::func();    // 因为函数在静态区域,可以通过类来访问
    (&obj_3)->func();    // 通过指针进行访问

    return 0;
}

单例模式

/*
    (入门级别)单例模式:创建一个只能实例化一个对象的类
*/

#include <iostream>
using namespace std;

class Human
{
public:
    static Human* func();

private:
    Human();    // 构造
    Human(const Human& obj);    // 拷贝构造
    static Human* p;        // 需要在外面给初始值,如下
};

Human* Human::p = NULL;        // 给初始值操作

Human* Human::func()
{
    if (p == NULL)
    {
        p = new Human;    // 给更新值操作(只更新一次)
    }
    return p;
}

Human::Human()    // 声明了构造,就一定要写,即使函数里面什么都不做
{}
Human::Human(const Human& obj)
{}


int main()
{
    
    Human* p1 = Human::func();
    cout << hex << p1 << endl;    // hex 以16进制输出

    Human* p2 = Human::func();
    cout << hex << p2 << endl;

    Human* p3 = Human::func();
    cout << hex << p3 << endl;
    
    return 0;
}

const 成员

/*
    const 关键字:
        1.常量成员分为"常量数据成员"和"常量函数成员"
        2.使用了 const,就不能修改内部数据
        3.补充知识:常对象
*/

#include <iostream>
using namespace std;

class Human
{
public:
    const int num;        // 常量数据成员,初始化必须用"成员初始化列表"

    Human();        // 无参构造
    Human(int a);    // 含参构造

    void func()const;    // 常量函数成员

    static int m;    // 静态(数据)成员
};
int Human::m = 0;

Human::Human() :num(5)    // 成员初始化列表
{}
Human::Human(int a) : num(a)    // 成员初始化列表
{}

void Human::func()const
{
    cout << num << endl;    // 在常量函数成员中,普通的数据成员,如 num 等,只能读,不能改
    m = m + 5;                // 在常量函数成员中,静态数据成员,如 m 等,可以修改
    this->m = 99;
}



int main()
{
    // 下面两种都是“常对象”-----整个对象里面的数据都不能改,静态数据除外
    const Human obj;
    Human const obj;

    return 0;
}

友元关系

/*
    友元关系:
        1.类的特性之一是封装,友元是打破封装的手段 ( 不要滥用!!)
        2.友元分为"友元函数"和"友元类"
        3.友元类,可以创建友元对象
*/
// 友元函数


#include <iostream>
using namespace std;

class A
{
private:
    int num;
    friend void func(A obj);    // 友元关键字 friend
public:
    A(){ num = 0; }        // num 初始化
};

void func(A obj)    // 普通函数
{
    obj.num = 6;    // 本来是不能访问类中私有的 num 的,但是因为上面加了 friend
}


int main()
{
    A obj_1; 
    func(obj_1);

    return 0;
}
// 友元类


#include <iostream>
using namespace std;

class A
{
private:
    int num;
    friend class B;        // 把 B 当作朋友(单方面)
};

class B
{
public:
    void func(A obj)
    {
        obj.num;    // 本来是不能访问 A 中的私有成员 num,但是因为 A 中加上了 friend,从此 B 中都能使用
    }
};

int main()
{
    return 0;
}

继承与派生

/*
    1.继承的概念:
        A =====> B
        父类    子类
        基类    派生类

    2.继承和派生:
        继承和派生描述的是同一个事情,只是看待事情的角度不一样,说法不一样罢了。
            子类继承父类
            父类派生子类

    3.继承分类
        1.单继承
        2.多继承
*/

继承方式

/*
    单继承和多继承语法:

    class 父类名
    {

    };

    1.单继承

        class 子类名 : 继承权限 父类名
        {

        };

    2.多继承

        class 子类名 : 继承权限1 父类名1,继承权限2 父类名2 ......
        {

        };

    3.继承权限
        1.公有继承 public
        2.私有继承 private
        3.保护继承 protected
*/
公有继承 public私有继承 private保护继承 protected
publicpublicprivateprotected
private不可访问不可访问
protectedprotectedprivateprotected

父子关系

/*
    子类在继承父类的过程中,如果子类的number和父类的number冲突,那么默认会使用子类的number,
    而父类的numbe r想要使用的话需要强调一下,它是来自父类的number
        e.g.
            // 下面是子类的对象obj
            obj.number                    // 默认是子类中的number
            obj.FatherClass::number        // 来自父亲的number
*/

菱形继承

在这里插入图片描述

#include <iostream>
using namespace std;

class A
{
public:
    int n;
};

class A_1 : virtual public A    // 虚继承
{
public:
    int a1;
};

class A_2 : virtual public A    // 虚继承
{
public:
    int a2;
};

class AA : public A_1, public A_2
{
public:
    int aa;
};

int main()
{
    AA obj;
    obj.aa;
    obj.a1;
    obj.a2;

    obj.A_1::n;
    obj.A_2::n;

    obj.n;    // 虚继承发挥的作用

    return 0;
}

多态

/*
    1.什么是多态?
            1.“子类对象的地址”可以赋值给“父类指针”
        对于通过“父类指针”调用“父类和子类中都有的同名、同参数表的【虚函数】”的语句
        编译时并不确定要执行的是父类的【虚函数】,还是子类的【虚函数】
        当程序运行到该语句时
        如果“父类指针”指向的是一个“父类对象”,则父类的【虚函数】被调用
        如果“父类指针”指向的是一个“子类对象”,则子类的【虚函数】被调用
        我们称这种机制,叫作“多态(polymorphism)”

            2.包含【虚函数】的类称为“多态类”
        “多态”可以简单地理解为,同一条函数调用语句能调用不同的函数
        或者说,对不同对象发送同一消息,使得不同对象有各自不同的行为


    2.什么是虚函数?
        所谓“虚函数”,就是在声明时前面加了 virtual 关键字的成员函数
        注意!virtual 关键字只在类定义中的成员函数声明处使用,不能在类外部写成员函数体时使用
        同时,要注意,静态成员函数不能是【虚函数】。


    3.补充:
        “多态”在面向对象的程序设计语言中非常重要,以至于有类和对象的概念
        不支持多态的语言,只能被称作“基于对象的程序设计语言”而不能被称为“面向对象的程序设计语言”
        比如:Visual Basic 就是前者

        ---内容借鉴于"C语言中文网" [Go]
*/

纯虚函数

#include <iostream>
using namespace std;

class A        // 含有“纯虚函数”的类叫做抽象类
{
public:
    virtual ~A() = 0;    // 析构函数实现"纯虚函数"时,还是要在外面写一下函数体的
    virtual void Print() = 0;    // 纯虚函数格式:"virtual" + "=0" + "没有函数体"
};
A::~A()
{

}

int main()
{
    // 抽象类不能用来定义对象(即:实例化对象),但是可以定义指针
    // 有什么用?可以为子类服务

    return 0;
}

数据抽象

什么是数据抽象

  • 数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节
  • 数据抽象是一种依赖于接口和实现分离的编程(设计)技术

数据抽象的好处

  • 类的内部受到保护,不会因无意的用户级错误导致对象状态受损
  • 类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码的错误报告
#include <iostream>
using namespace std;
 
class Adder{
   public:
      // 构造函数
      Adder(int i = 0)
      {
        total = i;
      }
      // 对外的接口
      void addNum(int number)
      {
          total += number;
      }
      // 对外的接口
      int getTotal()
      {
          return total;
      };
   private:
      // 对外隐藏的数据
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);
 
   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

通过抽象类来实现接口

数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

C++ 通过创建类来支持封装和数据隐藏(public、protected、private)

#include <iostream>
 
using namespace std;
 
// 基类
class Shape 
{
public:
   // 提供接口框架的纯虚函数
   virtual int getArea() = 0;
   void setWidth(int w)
   {
      width = w;
   }
   void setHeight(int h)
   {
      height = h;
   }
protected:
   int width;
   int height;
};
 
// 派生类
class Rectangle: public Shape
{
public:
   int getArea()
   { 
      return (width * height); 
   }
};
class Triangle: public Shape
{
public:
   int getArea()
   { 
      return (width * height)/2; 
   }
};
 
int main(void)
{
   Rectangle Rect;
   Triangle  Tri;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
   // 输出对象的面积
   cout << "Total Rectangle area: " << Rect.getArea() << endl;
 
   Tri.setWidth(5);
   Tri.setHeight(7);
   // 输出对象的面积
   cout << "Total Triangle area: " << Tri.getArea() << endl; 
 
   return 0;
}
f2cpp-开源项目:将Fortran代码转换为C++的Python工具 f2cpp是一个将Fortran 77代码转换为C++代码的工具。它的出现是为了帮助那些仍然在使用Fortran 77进行科学计算的开发者和研究人员。通过这个工具,他们可以将Fortran 77代码转换为C++代码,从而在新的计算环境中运行。开源软件(Open Source Software)是指源代码公开的软件,其开发过程和最终成果都可以被任何人查看、修改和分发。这种模式起源于1998年,以促进软件创新和质量提升为目的。开源社区通常会围绕这些项目形成,社区成员自愿参与项目的开发和维护工作。 阅读详情

相关推荐

从汇编到C++的桥梁:asm2cpp转换工具

本文还有配套的精品资源,点击获取 简介:本文探讨了如何将x86汇编语言转换为C++代码,强调了在特定场合汇编语言的重要性,并通过asm2cpp工具简化了转换过程。转换过程包括语法解析、指令映射、标签处理、预处理器宏的使用以及内存模型的处理。虽然转换后的C++代码具有更好的可读性和可维护性,但可能会丢失某些汇编特性,因此转换需要深思熟虑。 1. x86汇编语言基础 ...

weixin_42360733的博客 1911

Cppfront与Cpp2语法:探索C++的简洁安全新范式

Cppfront是一个实验性编译器项目,旨在为C++提供全新的语法形式(称为Cpp2或"C++语法2"),同时保持与现有C++生态系统的完全兼容。该项目由著名C++专家Herb Sutter发起,其核心理念是通过语法层面的创新,使C++代码编写变得更简单、更安全。 ## Cpp2语法特性解析 ### 设计哲学 Cpp2并非要创建一门全新的编程语言,而是作为C++的"另一种语法皮肤"。它保留了...

gitblog_01066的博客 612

开源C++代码转UML图表工具cpp2dia实战详解

示例:调用ctags生成符号表该工具特别适用于遗产系统重构、跨团队知识传递等场景,支持自动化集成至CI/CD流程,显著降低大型项目认知负荷。Tcl 的变量系统完全动态,变量在首次赋值时自动创建,无需预先声明类型或作用域。这种机制非常适合处理不确定数量和结构的数据集,比如从多个头文件中提取的类声明集合。考虑如下场景:我们需要收集每一个类的成员函数及其访问级别(public/private/protected)。可采用嵌套数组结构组织数据:# 示例调用在此例中:初始化一个名为。

weixin_42605397的博客 802

Delphi2Cpp - Delphi代码转换为C++代码工具

Delphi2Cpp - Delphi代码转换为C++代码工具 【下载地址】Delphi2Cpp-Delphi代码转换为C代码工具 Delphi2Cpp 是一款高效便捷的代码转换工具,专为将 Delphi 代码无缝转换为 C++ 代码而设计。它支持单文件转换,操作简单,只需几步即可完成整个转换过程。尽管转换过程中界面可能...

gitblog_06723的博客 554

从原理到应用:深入解析双编码器在机器人关节力矩感知中的实现

本文深入解析了双编码器方案在机器人关节力矩感知中的实现原理与应用。该方案通过在电机侧和输出侧分别安装编码器,利用两者位置差异间接高精度计算外力,克服了传统电流环精度不足和扭矩传感器成本高昂的缺点。它为实现协作机器人的丝滑拖动示教、灵敏碰撞检测以及足式机器人的动态平衡与柔顺控制提供了关键技术支撑,是目前高性能机器人力控的主流选择。

t8u9v0w1x的博客 661

23数字图像置乱技术(matlab程序)

所谓“置乱”,就是将图像的信息次序打乱,a像素移动到b像素位置上,b像素移动到c像素位置上,……,使其变换成杂乱无章难以辨认的图片。数字图像置乱技术属于加密技术,是指发送发借助数学或者其他领域的技术,对一幅有意义的数字图像做变换,使之变成一幅杂乱无章的图像用于传输。在图像传输过程中,它通过对图像像素矩阵的重排,破坏了图像矩阵的相关性,使非法截获者无法从杂乱无章的图像中获得原图像信息,以此实现信息的加密。接收方经去乱解密可恢复原图像。

m0_57943157的博客 1204

Cppfront项目解析:探索下一代C++语法Cpp2的实验性编译器

C++作为一门历史悠久的编程语言,其语法复杂性一直是开发者们讨论的焦点。Cppfront项目正是为了解决这一问题而诞生的实验性项目,它提出了"C++语法2"(简称Cpp2)的概念,并提供了首个实现这一语法的编译器cppfront。 ## 项目核心概念 ### 什么是Cpp2? Cpp2是C++的一种替代语法设计,旨在提供: - 更简洁的代码表达方式 - 更强的类型安全性 - 更直观的语义表达...

gitblog_00137的博客 737

实战篇【2】-H3C防火墙开局基础配置

本篇文章为“H3C防火墙开局基础配置”,主要涵盖配置管理地址、聚合端口、安全区域、安全策略、静态路由、ACL,WEB和SSH远程管理、Console、SNMP、NTP时钟、日志主机等内容,对比交换机配置开局,增加两处配置,安全区域和安全策略。方便调试人员远程管理、调试。

weixin_47402139的博客 1万+

Jinja2Cpp 使用指南

Jinja2Cpp 使用指南 项目介绍 Jinja2Cpp 是一个基于 C++ 的模板引擎库,旨在提供类似于 Python 中流行的 Jinja2 模板系统的能力。此项目由 Flex Ferrum 和 Ruslan Morozov 维护,并且致敬了原始的 Jinja2 规范及其实现者。它在设计上力求利用现代 C++ 特性(如 C++17 标准),支持 std::variant, std::stri...

gitblog_00232的博客 1205

Keil5安装教程(保姆级)Keil5mdk安装步骤

6、复制生成的激活码,粘贴在New License ID Code处,点击Add LIC,即可成功激活mdk,显示mdk的使用期限。6、复制生成的激活码,粘贴在New License ID Code处,点击Add LIC,即可成功激活C51,显示mdk的使用期限;3、在安装文件中点击keygen.exe文件,粘贴复制过的CID,选择Target为C51,点击Generate,生成激活码;4、在弹出的界面中会自动安装在安装keil的路径,点击“Next”进行后续安装,安装完成后,点击“Finish”。

m6886258的博客 9万+

[MTK][Android P]如何去掉差分包中的preloader分区

最近碰到一个问题,在进行差分升级的时候,会因为某些原因导致preloader hash值不匹配,升级失败,所以需要在差分升级的时候不升级preloader。 解决的方法,就是在制作AB分区的差分升级包的时候,把目标zip解压出来,把ab_partitions.txt中的分区名去掉,同时把preloader.img去掉 修改如下: Project/build/tools/releasetool...

thonmin的专栏 1434

推荐文章:加速从MATLAB到C++的华丽转身 —— 使用Matlab2Cpp

推荐文章:加速从MATLAB到C++的华丽转身 —— 使用Matlab2Cpp 在当今高度工程化的世界中,代码转换工具成为连接不同技术栈的桥梁。如果你是一位长期在MATLAB舒适区编码,但又不得不面对将代码迁移到C++挑战的开发者,那么【Matlab2Cpp】绝对是一个不应错过的宝藏工具。尽管目前该项目处于无人维护的状态,但它依旧值得我们挖掘其强大之处,并期待新的维护者或社区接力,继续它的光辉旅程...

gitblog_01083的博客 421

《Python全栈系列教程》专栏介绍及文章汇总

《Python全栈系列教程》专栏介绍及文章汇总

孤寒者的博客 71万+

libv4l2cpp:一款强大的V4L2 C++封装库

libv4l2cpp:一款强大的V4L2 C++封装库 项目介绍 libv4l2cpp 是一款基于C++的V4L2封装库,旨在简化V4L2接口的使用,使得开发者能够更轻松地进行视频设备的捕获和输出操作。该项目源自 mpromonet/libv4l2cpp,并在其基础上进行了扩展和优化。主要改进包括增加了更多的打印信息、解决了视频设备可能拥有多个视频资源的问题,并添加了对OpenCV Mat BGR...

gitblog_00916的博客 1726

innovus:ccopt_design分段长tree操作

这步don't touch保证后面完整cts尽量不会动到已经长过的tree。需要给sub tree手写一个spec,参考create_ccopt_clock_tree_spec -file的写法,只写create_ccopt_clock_tree和skew group部分就行。

m0_61544122的博客 1676

【人工智能】AI驱动值班巡检Agent(Hermes)

传统运维值班巡检场景中,存在四大核心痛点:本项目基于 Agent+Skills+浏览器自动化 架构,构建了具备自我进化能力的AI值班员,核心逻辑流如下:

奶爸的编程之路,也就一周冷个三天 177

Cpp2Uml是一个能够为C++项目生成UML模型文件的Eclipse插件

Cpp2Uml是一个能够为C++项目生成UML模型文件的Eclipse插件。

石头 2018

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python2cpp :帮助Python开发者轻松入门C++

python2cpp :帮助Python开发者轻松入门C++ 项目介绍 在编程语言的世界中,Python因其简洁易懂的语法和丰富的库资源,深受开发者的喜爱。然而,在某些性能敏感的应用场景中,C++由于其高效的执行速度和底层操作的灵活性,成为了更好的选择。对于熟悉Python的开发者来说,如何快速掌握C++,成为了进入新领域的关键。python2cpp项目应运而生,旨在帮助有一定Python基础的程...

gitblog_00473的博客 594

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

探索Go与C++的桥梁:go2cpp项目介绍

探索Go与C++的桥梁:go2cpp项目介绍 在编程语言的世界中,Go和C++各自占据着重要的位置。Go以其简洁和高效的并发处理能力著称,而C++则以其强大的性能和灵活性受到青睐。然而,将Go代码转换为C++代码一直是一个挑战。今天,我们将介绍一个令人兴奋的开源项目——go2cpp,它旨在通过C++20将Go代码编译为本地可执行文件,为开发者提供了一个全新的视角。 项目介绍 go2cpp是一个创新...

gitblog_00499的博客 665

Office 一键部署与激活完整指南:LKY_OfficeTools 快速上手与机制拆解

重装完系统后,手工部署 Office 意味着自己找下载页、判断位数、决定组件,最后卡在激活报错上。LKY_OfficeTools 是一个 Windows 命令行工具,一次运行替你完成最新版 Office 的下载、安装、KMS 激活三步,全程只在组件提示处停一次,其余交给 5 秒倒计时。 ## 🚀 快速上手:一条命令装好最新版 Office - **第 1 步**:获取源码,解压即用 - **

gitblog_00095的博客 348

Matlab2Cpp 开源项目教程

Matlab2Cpp 开源项目教程 项目介绍 Matlab2Cpp 是一个开源项目,旨在将 MATLAB 代码转换为 C++ 代码。这个工具可以帮助研究人员和开发者将他们的 MATLAB 算法和模型移植到 C++ 环境中,以便在性能要求更高的场景中使用。Matlab2Cpp 通过解析 MATLAB 代码并生成相应的 C++ 代码,简化了这一转换过程。 项目快速启动 安装 首先,克隆项目仓库到本地:...

gitblog_00576的博客 1092

推荐文章:探索Go到C++的桥梁 - go2cpp

推荐文章:探索Go到C++的桥梁 - go2cpp 在软件开发的浩瀚宇宙中,不同的编程语言各自闪耀着独特的光芒。今天,我们要聚焦于一个令人眼前一亮的开源项目——go2cpp,它如同一位技艺高超的语言翻译,巧妙地将Go语言编写的代码转换为C++代码,开辟了跨语言编码的新篇章。 项目介绍 go2cpp是一个革命性的工具,旨在解决从Go语言向C++迁移或互操作的需求。通过深入解析由Go源文件编译而成的W...

gitblog_01189的博客 725

推荐开源项目:Keras2Cpp——将Keras模型转化为纯C++

在当今深度学习的热潮中,Keras因其易用性和强大的功能,成为了许多开发者首选的框架之一。但是,在特定场景下,如嵌入式系统或高性能计算,可能需要以更底层的语言,如C++,来实现模型推理。这就是`keras2cpp`项目的初衷,它允许你将训练好的Keras模型转换为纯C++代码,让你在保持高效性能的同时,也能享受到预训练模型的便利。 ## 项目介绍 `keras2cpp`是一个轻量级的工具,旨在

gitblog_00040的博客 610

Delphi2Cpp-Delphi代码转换为C++代码工具:项目核心功能/场景

Delphi2Cpp-Delphi代码转换为C++代码工具:项目核心功能/场景 【下载地址】Delphi2Cpp-Delphi代码转换为C代码工具 Delphi2Cpp 是一款高效便捷的代码转换工具,专为将 Delphi 代码无缝转换为 C++ 代码而设计。它支持单文件转换,操作简单,只需几步即可完成整个转换过程。尽管转...

gitblog_06718的博客 445

探索json2cpp:将JSON文件编译为C++常量数据结构的利器

探索json2cpp:将JSON文件编译为C++常量数据结构的利器 项目介绍 在现代软件开发中,JSON作为一种轻量级的数据交换格式,广泛应用于配置文件、API响应等场景。然而,在C++项目中直接使用JSON文件通常需要运行时解析,这不仅增加了运行时开销,还可能带来潜在的安全风险。为了解决这一问题,json2cpp应运而生。json2cpp是一个开源项目,它能够将JSON文件编译为C++的stat...

gitblog_00003的博客 1038

matlab2cpp

简述 github上下载matlab2cpp文件安装后,可以将matlab 的.m文件转成cpp windows安装 Python setup.py install 文件转换 m2cpp example.m 安装包下载:https://github.com/jonathf/matlab2cpp

sun 417
上一篇: Cpp-1
下一篇: Cpp-3
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值