C++-自整理笔记

C++笔记整理(基础篇整理) C++学习笔记(基础篇) 新的概念:对象、类、实例、消息 (其实都是字面意思) (1)对象:具体的事物 / 泛指的事物 选课系统 :(学生)(老师)(课程) 三者都是 “对象” 对象(角色)——用来提供服务、执行任务 有自己的特征——数据成员 对象都有什么 有可以完成的行为——成员函数 对象示例:圆 (对象) 圆的特征:圆心(x,y) 半径 r 圆的能力: 重新设置圆心 重新设置半径 计算周长、面积 (2)消息:消息传给对象,对象接收到后,启动行为 (3)类:分类的 ‘类’ 人们只把具有相同性质 阅读详情

/**********************************************************************
 C++自整理笔记
***********************************************************************/
//1. 概念性的东西

//1) C++ 是由AT&T贝尔实验室的Stroustrup开发的。

//2) iostream.h等同于stdio.h(属于C),若要使用printf()/scanf(),需要stdio.h

//3) C语言中变量的声明需要放在程序或代码块头。C++中可任意放。

//4) C和C++当中,不带参数函数的区别
 int fun(); // 在C中表示可以取0个或多个变量;在C++中表示不需要转入变量。

//5) 符号化常量的地址不能赋予一个指针:
 Pointer = &number; // it’s wrong, cause const char number
//const常量地址只能赋予常量指针:
 const int x;
 const int *cpointer;
 int *pointer;
 cpointer = &x; //right
 pointer = &x; //wrong
//const指针传入函数,表示函数不能改变传入的值。
 int lookup(const char*ar,int len)

//6)    结构
 Struct book
 {
  Char title[80];
  Float price;
 }
 Struct book mybook  //C语言写法(个人推荐这样写,比较明了)
 Book mybook;    //C++写法

//注:枚举的声明和结构一样
 
//2. 指针常量和常量指针

//1)指针常量可以通过指针改变变量的值
 Int x = 2;
 Int * const point = &x;
 *point = 4; //now x = 4
 
 void main()
 {
  char * const str = "china";
  *str = "yangzhou"; // right 可以修改字符串的内容
  str = "another";             // wrong
 }
 
//2)常量指针不可以
 Int x = 2;
 Const int * point = &x;
 *point = 4; // wrong
 
 void main()
 {
  const char * str = "china";
  *str = "yangzhou"; // wrong
  str = "another";             // right 修改指针指向另一个字符串
 }

//3)上面两个例子看起来头疼吧,教你一个好方法;
//指针常量中,const用来修饰str,故str不能改变;
//常量指针中,const用来修饰*str,故*str不能改变。

//4)两种方法的组合,使地址和内容都无法改变
 void main()
 {
  const char * const str = "china";
  *str = "yangzhou"; //wrong
  str = "another";     //wrong
 }

//5)const修饰“引用”,使“引用”不可修改。
 void main()
 {
  int x = 20;
  const int &rx = x;
  rx = 2000; //wrong
 }

//6)声明函数时若在末尾加const,表示在该成员函数内不得改变类变量
 class myclass
 {
  char * str;
  myclass()
  {
     str = new char[64];
  }
  ~myclass()
  {}
  char fun(char nstr) const
  {
     str = "china";//wrong
     return str;
  }
 }

//7)数据传递给函数的方式默认是值传递,但如果一个函数被调用的次数过多,那就会
//产生很多个拷贝,造成效率不高,故我们可以使用“引用”,但“引用”带来的隐患是它可
//能修改变量的值,为此,我们可以使用“const引用”
 int ReturnInt(const int &);
 void main()
 {
  int i=10;
  ReturnInt(i);
 }
 int ReturnInt(const int &nInt)
 {
  nInt++;//wrong
  return nInt;
 }
           
//3)流(I/O)
 cin>>var1;
 cout<<var1<<endl;
 //转义字符:/a、/b、/f、/n、/r......(自己去查吧)
 int x;
 cin>>hex>>x;//将输入的x定性为十六进制数,并转换成十进制
 cout<<x;//假如输入64,那这里=100
 //dec:十进制       hex:十六进制      oct:八进制
 //参数化I/O操作符
 //首先需要 #include <iomanip.h> (Setbase似乎用不了,不知道它需要的头文件的名称)
 Setbase(int):   //设置换算格式(8/10/16)
 SetW(int):   //设置字段距离
 Setprecision(int);  //设置浮点数精度
 Setfill(int);    //设置填空字符
 Setiosflags(long); //设置输出字段的格式位
 resetiosflags(long);//复位输出字段的格式位
 
 Setiosflags(ios::showpos)<<100<<endl;
 //输出+100;showpos:在正数前面使用"+"号,更多的格式保存在一个枚举里面,自己去查吧!
 
 //更多的I/O函数
 getline //读一整行
 cin.getline(aLine,40,'t');//读到't'终止
 gcount //统计输入的字符个数
 ignore //忽略输入流中的字符
 
//get/put
 void main()
 {
  char aChar;
  aChar = cin.get();
  while(aChar!='n')
  {
     cout<<aChar<<endl;
     aChar = cin.get();
  }
 }
 
 void main()
 {
  char aChar = 'A';
  cout.put(aChar);
 }
 
//还有许多其它函数,请自行查阅

 

 

 

 /**********************************************************************
*  <模板>                                                                                             
*模板是一种参数化的类或函数,也就是类的形态或者函数的形态可以被参数改变.
***********************************************************************/

/**********************************************************************
*  <模板函数>  */                                                                                            

 template <class T> T funname(para type)

/*自我理解:
*       如果要计算int型和float型数组的平均值,可以分别写int_average(int nVal,*int size)和
*float_average(int nVal,int size)两个函数,但其实它们里面的步骤是一*样的,只是数据类型
*不同,如果使用模板,就不需要这么麻烦了。
***********************************************************************/
//例1:
 template <class T> average(T *array,int size)
 {
  T sum = 0;
  for(int i=0;i<size;i++)
   sum += array[i];
  T avg = sum/size;
  return avg;
 };
//"<class T>"告诉编译器"T"是函数使用的数据类型。

//提示:模板函数最好写在头文件中,但必须要写在main()前面

//例2:
 template <class T>
 T max(T x,T y) //传入的参数改必须是同类型的
 {
  return (x>y)  ? x:y;
 }

 void main()
 {
  double a = 50.235;
  double b = 50.234;
  double c = max(a,b);
  cout<<"最大值="<<c<<endl;
 }

//函数模板经实例化所生成的具体函数叫"模板函数";
//例如例1,可以实例化成 average(int,int)、average(float,float)、average(char,char) 等等...
//每一个模板形参前必须有"class"关键字!
//在template语句与函数模板语句之间不允许有别的语句;


/**********************************************************************
*  <多类型模板函数> 
*
*       如上题数组,若数组中所有元素之和超过类型范围怎么办?可用多类型*函数模板解决
***********************************************************************/
//例:
 template <class T1,class T2>
 T1 average(T1 *array,T2,int size)//声明函数模板
 {
  T2 sum = 0;  
  for(int i=0;i<size;i++)
   sum+=array[i];
  return(sum/i);
 }
 void main()
 {
  __int16 intArray[]={10000,20000,30000}; // 范围 -32768 - 32767
  cout<<"整数平均值="<<::average(intArray,3)<<endl;
 }

/* 自我理解
    此例中,当T1接收了__int16 intArray[]后,它俨然就成了__int16型了,但要命的是,数组中的
数字相加后,会超界,so...再定义一个T2,用T2来接收相加后的的数据,T2会根据数据的大小来
确定自己的类型。 */


/**********************************************************************
*  <模板函数的重载> 
*       因为模板函数需要接收同类型的参数,要是参数类型不一致怎么办?可以使用函数重载.
***********************************************************************/
 template<class T>

 T max(T x,T y) //传入的参数改必须是同类型的
 {
  return (x>y) ? x:y ;
 }

 int max(int x ,char y) //重载函数 max,一个整型参数,一个字符型参数
 {
  return (x>y) ? x:y ;
 }

 void main()
 {
  int a = 55;
//     int b = 66;
  char b = 'A'; //ASCII 码 65
  cout<<"最大值="<<max(a,b)<<endl;  //此处将调用重载函数
 }


/**********************************************************************
*  <类模板> 
***********************************************************************/
 const int size = 10;
 template <class T>
 class stack
 {
  T stck[size]; //模板定义数组的数据类型
 public:
  //若成员函数中使用了模板,则此函数需要在类体外定义!!!
  void push(T ch); //模板定义形参类型
  T pop(); //模板定义返回类型
 };

 template <class T>  //注意:在类体外实现成员函数时的写法!!!
 void stack<T>::push(T ob)
 {
 }

 template <class T> //注意:在类体外实现成员函数时的写法!!!
 T stack<T>::pop()
 {
  T a = 0;
  return a;
 }
 void main()
 {
  stack<int> a; //对象的定义
  //stack<int> a,b;
  //stack<double> b;
 }

/**********************************************************************
*  <多参数类模板> 
* template <class T,T t> 或者 template <class T,int size>
*      参数的名字在整个模板的作用域内都有效,类型参数可以作用作用域变量的类型,数值型
*参数可以参与计算,就像使用一个普通常数一样(例如 cout<<t<<endl;)
***********************************************************************/
 //多参数模板
template <class T,int size> //第一个参数是类型,第二个参数是数值(必须是常量)
 class stack
 {
    T stck[size];
    public:
    void push(T x);
    T pop();
    void print()
    {
        cout<<size<<endl;
    }
 };

 template <class T,int size> //注意写法!!!
 void stack<T,size>::push(T x)
 {
 }

 template <class T,int size>  //注意写法!!!
 T stack<T,size>::pop()
 {
    T a = 0;
    return a;
 }

 void main()
 {
    stack<int,10> a1,a2; //合法,对象的定义

    int x = 100;
    stack<int,x> b1; //不合法,x必须是常量

    const int y = 100;
    stack<int,y> c1; //合法.

    a1.print();
 //    stack<double,5> b1,b2; //对象的定义
 }


/**********************************************************************
*模板总结:
*      模板提供了代码复用.在使用模板时首先要实例化,即生成一个具体的函数或类.函数模
*板的实例化是隐式实现的,即由编译系统根据对具体模板函数(实例化后的函数)的调用来进
*行相应的实例化,而类模板的实例化是显示进行的,在创建对象时由程序指定.
*
*      以前我一直以为模板的方法全部都是隐含为inline(内联,就是函数体定义在类之外,提高
*函数的执行效率)的,其实并非如此(Thinking C++[2]中有提到模板的non-inline function).所以
*我们一般在后缀为 .i 或者 .inl的文件中完成模板类方法的实现.
*例: //in temp.h                         //in temp.inl 
*  template<class T>    template<class T>
*  class Temp       void Temp<class T>::print()
*  {          {...}
*  public:
*   void print();
*  }
*  #include "temp.inl"
*
*语法检查
*     对模板语汇法的检查会被延迟到使用的时刻,而不像一般的类或函数在编译器读到时就
*检查,所以如果你定义了一个模板,且语法错误,但你却没有去用它,编译时不会报错.
*
*继承
*      模板类和普通的类一样,也可以有派生类.且它的基类和派生类既可以是模板类,也可以不
*是模板类.
* class Abase
* {...};
* template<classT>
* class A:public Abase
* {...};
***********************************************************************/
/*模板小练习*/
/*
template<class T>
T sum(T x,T y)
{
    return x+y;
}

void main()
{
    int a = 100;
    int b = 200;
    int c = sum(a,b);
    cout<<"总和="<<c<<endl;
}
*/

/*
template <class T1,class T2>
T1 average(T1 *x,T2 y,int size)
{
    T2 sum = 0;
    for(int i=0;i<size;i++)
    {
        sum += x[i];
    }
    return sum / size;
}

void main()
{
    __int16 array[] = {20000,10000,15000};
    __int16 val = ::average(array,0,3);
    cout<<"平均值="<<val<<endl;
}
*/

/*
template <class T,int size>
class stack
{
private:
    T size[100];
public:
    void push(T);
    T pop();
};

template <class T,int size>
void stack<T,size>::push(T ch)
{   
    cout<<"in the push area"<<endl;
}

template <class T,int size>
T stack<T,size>::pop()
{
    T a = 0;
    return a;
}

void main()
{
    stack<int,100> a;
    a.pop();
    a.push(100);
}
*/


UE4虚拟现实实习总结---蓝图中的常用交互事件|人物行走|物体移动|动态触发|材质改变 这周是ue4实习周,老师给我们的任务就是基于中学物理和化学实验的虚拟实验室,要有交互事件,后期可以链接vr手柄进行操作。 但是实习开始老师影都没了,全靠自己学习。感觉自己学习了不少东西,这里就来总结一下!顺便感叹一下,ue4好玩又强大! 以下主要介绍蓝图中的几种交互事件1.新建游戏角色并且进行角色行走旋转,2.如何控制物体移动旋转,3.如何控制物体材质动态变化 大家可以举一反三,作出更好的作品 1.新建游戏角色并且进行角色行走旋转 步骤 在刚刚新建的文件夹中鼠标右击新建蓝图类,然后分别创建以下:chara 阅读详情

相关推荐

[Pytorch案例实践001]手写MNIST数字识别

Pytorch实现手写数字识别,带完整数据集。

2403_83044722的博客 1115

C++学习笔记整理

c++ from 2019 10 20 C++学习 《 C++ primer 5th ed 》 网上的知识 排列较为混乱,仅供参考。 C++简介 C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。 C:1940 ,面向结构,面向过程,代码太多后,管理很难,未解决软件危机。 C++被认为是一种中级语言,它综合了高级语言和低级语言的特点...

aazqy1234的博客 734

2026四款AI原生IDE实测:Trae、Qoder、CodeBuddy、Cursor能力边界深度解析

AI原生IDE正从代码编辑器演进为开发者智能工作流中枢,其核心在于对上下文理解、AST编辑意图建模与多模态任务调度的工程化实现。区别于传统插件式AI辅助,真正的AI原生IDE需具备知识库嵌入、符号图索引、操作链固化等底层能力,从而支撑Figma转码、N+1查询修复、跨语言迁移等复杂场景。Trae强调中文语境与企业规范的强绑定,Qoder聚焦AST级编辑轨迹预测,CodeBuddy通过IDE/插件/CLI三态划分控制权边界,Cursor则以云端Agent实现开发任务的时空并行。本文基于真实项目压测,揭示免费版

ctk87443的博客 2456

C++初学笔记整理

c++初学整理 1. C++关键字 2. 命名空间 3. C++输入&输出 4. 缺省参数 5. 函数重载 6. 引用 7. 内联函数 8. auto关键字(C++11) 9. 基于范围的for循环(C++11) 10. 指针空值---nullptr(C++11)

m0_62918577的博客 943

有限元中的对称魔法:用1/6模型算整个涡轮叶片(含MATLAB代码)

本文深入解析了有限元分析中针对循环对称结构的高效求解策略。通过利用涡轮叶片等结构的几何重复性,仅需对1/6基本扇区建模并施加循环对称条件,即可精确推演整体力学行为,大幅降低计算规模。文章从数学原理推导到MATLAB代码实现,提供了完整的实战指南,适用于旋转机械的静力、模态及谐响应分析。

fire9的博客 310

揭秘大型语言模型:从神经元到思维透明的奇妙旅程

这篇博客带你走进大型语言模型的内部世界,从神经元的小任务,到功能向量的团队合作,再到层间的协作和思维的透明化。掌握这些知识,能让你在开发中更高效地优化AI,在研究中更深入地探索模型的奥秘。建议多动手实践,把这些理论变成自己的能力!

数据与算法架构提升之路专栏 1520

C++知识整理笔记

c++

plain_的博客 3465

手把手教程:使用C#实现工业上位机开发

深入讲解如何利用C#进行上位机开发,涵盖通信协议与界面设计,助力掌握工业自动化核心技能。结合实际案例,让上位机开发更高效直观。

weixin_32480007的博客 2064

C++11的整理笔记

用(或)声明模板参数包,其中Args// 模板参数包:Args 表示零个或多个类型用声明函数参数包(结合万能引用&&// 函数参数包:args 表示零个或多个函数参数。

2301_80157147的博客 1002

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了LCC补偿网络的恒流输出、软开关实现和抗偏移能力等优势,并对比了不同补偿拓扑特性。随后分步骤讲解了Simulink建模流程,包括LCC主电路构建、关键参数设计、双闭环控制系统实现等核心环节。重点阐述了移相控制策略和软开关验证方法,提供了系统效率计算和抗偏移测试的调试技巧。最后展示了仿真结果,在耦合系数变化20%时,闭环系统仍能保持输出电压稳定在±2%波动范围内。文章还探讨了工程扩展方向,并针对常见问题给出了解决方案,为无

xiaoheshang_123的博客 539

TSP:车为什么能和云端交互?

TSP:车为什么能和云端交互?

天赐好车的博客 410

C++ 笔记整理

自从使用Quick-cocos-lua之后,已经很久没有大量写c++代码,介于要接受一个服务器项目,先回顾一下之前的只是。顺道把之前看C++ Primer的一些笔记整理一下。字符串转化拼装字符 sprintf(char*,char,char);char newstr[128]; sprintf(newstr,"%s",str); sprintf(newstr,"fish%02d%_02d.png",

kavenGw的专栏 351

高通开发系列 - Bootloader之lk匹配dtb和dtbo中msm-id和board-id的知识

lk匹配dtb和dtbo中的msm-id和board-id等知识

fulinux的博客 4245

C++核心编程笔记整理

C++核心编程 1 内存分区模型 代码区、全局区、栈区、堆区 1.1程序运行前 代码区: ​ 存放CPU执行的机器指令 ​ 代码区是共享的,多次执行也只执行内存中的同一段代码 ​ 代码区是只读的,防止意外修改 全局区: ​ 包含全局变量,静态变量和常量 ​ 常量区包括字符串常量和全局常量 ​ 该区域数据在程序结束后由操作系统释放 1.2 程序运行后 栈区: ​ 由编译器自动分配释放 ​ 存放局部变量,函数的参数值 ​ 不要返回局部变量的地址 堆区: ​ 由程序员分配释放 ​ 若程序员不释放,程序结束时由操作

qq_41746379的博客 292

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++笔记整理

类:类是对同一类对象的抽象总结,是一个概念。对象:按照类的规定创建的实体。程序员就是面向对象编程世界中的“上帝”,因此需要先写类的代码,才能按照这段代码创建对应的对象。参考类来创建对象的过程被称为“实例化”。因此,对象无法脱离对应的类存在。一个类主要包括:属性用来描述对象的数据元素,通常是一个名词变量,例如:身高、体重、价格等,也称为“成员变量”或“数据成员”。行为。

m0_59368221的博客 379

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【学习笔记】C++代码规范整理

C++代码规范学习整理

m0_51429770的博客 1237

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

c++学习笔记整理

黑马cpp学习笔记整理

qq_43157097的博客 2383

C++笔记整理(参考整理自各大博客)

为什么构造函数不能是虚函数,析构函数往往是虚函数? 静态存储区。无论在哪里构建,其过程都是两步:首先,分配一块内存;其次,调用构造函数。好,问题来了,如果构造函数是虚函数,那么就需要通过vtable来 调用,但此时面对一块 raw memeory,到哪里去找vtable呢?毕竟,vtable是在构造函数中才初始化的啊,而不是在其之前。因此构造函数不能为虚函数。 析构函数可以是虚函数...

weixin_30376453的博客 275

C++进阶笔记整理

简介:这些代码和笔记是我在2020年寒假学习C++时所留下的适合进阶C++来时常进行复习 我的学习来源以及摘要是从清华C++进阶课程中摄取吸收 所有的代码都没有加头文件 #include <iostream> #include <cassert> #include<vector> using namespace std; 如果运行的时候出现错误请及时检查以及反...

GiannisLiu的博客 407

【C++笔记整理—第1期】

C++学习笔记第1期,主要回顾了结构体、类的一些简单内容

Jin的博客 1458

【笔记】C语言转C++

网课链接:【C语言 转 C++ 简单教程】 https://www.bilibili.com/video/BV1UE411j7Ti/?以下笔记是我通过此网课整理 建议先看完网课 再用这个笔记进行复习。网课老师同时整理了思维导图 可以在视频简介获取。网课老师B站id:别喷我id。视频总时长:01:55:27。

2401_82552318的博客 1643

C++day1(笔记整理)

第一个c++程序:hello world、cout的使用、输出斐波那契的前10项。 1 1 2 3 5 8 13 ····、cin标准输入流对象、终端输入一个字符,判断该字符的类型,字母(大写/小写)、数字字符,其他字符。、局部变量和命名空间冲突、全局变量和命名空间冲突问题、命名空间的嵌套、给命名空间重命名、using的其他用法、C++中字符串的定义、C++风格和C风格字符串的转化、empty()、字符串比较、字符串的输入、终端输入一个字符串,以'\n'作为标志停止,c++中的bool

m0_68542867的博客 1434

C++ Primer笔记整理

1. 迭代器:迭代器是一种对象,它可以看做是游标,用来遍历标准模板库中的部分或者全部元素。 每个迭代器指向容器中确定的地址,此外,迭代器还提供一些基本操作符:*、++、==、!=、=。 2. 模板:是创建类或函数的蓝图或者公式,比如(STL里面的vector,map,set等),分为函数模板和类模板,函数模板是一种独立于类型的函数,类模板是一种独立于类型的类,模板是泛型编程的基础。 3

秋水寒tu_tu 653

【C++】入门笔记整理

概念部分: (一)OOP思想四大属性: 1、封装 2、继承 3、多态 4、抽象 (二)权限:public private (三)this指针: 成员方法声明或者调用的时...

xing1584114471的博客 330
上一篇: ASP2.0-轻松实现数据库应用开发
下一篇: VC其它-如果将VC中的字体换成Verdana
MasterFT
博客等级 码龄20年 48粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值