QT_C++

QT_C++


C 与 C++  区别:  面向过程:吃(狗,屎)

            面向对象:狗. 吃(屎)

                   ^ . ^

                

博客:https://www.runoob.com/cplusplus/cpp-tutorial.html

 

插入符:<<

控制符:endl  

换行符:\n

cout:打印屏幕输出(  cout.put   )

cin  :读取键盘输入(cin>>    cin.get()  )

 

数据类型:  类

  类:  描述一种数据类型全部属性

  对象: 根据描述创建的实体

  类库

 

  英雄 雷锋  (类   对象)

    iostream   cout (cout 是 iostream 的类对象)

 

数据:   常量  变量

类型: 基本类型: 整型(无符号和有符号 *  char,  short,  int,  long,  long long  =  10 种) 

            short 至少16位

            int 至少与short一样长  (自然长度,计算机处理效率最高)

            long至少32位,至少与int一样长 (大于16位使用)

            long  long  64位 

 

 

          实型(float, double, long double)

            float  至少32位(32位)

            double  至少48位,不少于float(64位)

               long double 至少和double一样多

 

            表示方法:小数 指数(E法:E+n小数点右移n位;E-n小数点左移n位)

 

 

 

           字符(char)''

            #include<climits>

                  

                这些其实就是宏 !

 

                

            字符串:"  "

 

          bool:  true 1  false 0

          const  限定符

 

 

类型转换:

  表达式转换:整型提升(bool, char, unsigned char, short 提升为 int )int 为计算机的自然类型

        运算涉及两种类型,小类型转换为大类型  

  传参的转换:整型提升  float 提升为 double

  强制的转换: (int)val  C   int(val)  c++       很危险     

         static_cast<long><val> 将一种类型转换为另一种类型;

 

 

 

 

 

 

 

 

 


 

 

 

整型常量:十进制  八进制  十六进制

            

 

 

 

            浮点 

             使用变量

      复合类型:

 

 变量名:两个下划线或下划线和大写字母开头的名称被保留给实现使用,以一个下划线开头的名称被保留给实现,用作全局标识符。

 

 

 

 运算符


 

+  -  *   /    %

 

 

复合类型(构造类型)

 

数组


 数组的  

动态联编:int arr [5] ;

静态联编:int * arr = new int [10];

 

数组表示法;arr [1];

指针表示法:*(arr + 1);

 

 

 

 

 

字符串


 字符数组  指针(常用)  string类库

 

字符数组:

  char arr[5] = {'a', 'b', 'c', '\0' };

  char arr[ ]  = {"abc"};

 

 字符串的比较:strncmp

 

 

拼接字符串常量:

 将两个引号中的字符串合并为一个

面向行输入:

 cin.getline: cin.getline(arr, 20);

    cin.get:   cin.get(arr,20)  /  cin.get()

    cin.get.get cingetline.getline (拼接)

   get() 读取空行后将设置失效位,可以通过cin.clear() 恢复;

 

字符数字混合:  

   

string 类: 提供了字符串作为数据类型的表示方法

  string str ; str 创建一个长度为0的string对象,并自动调整str的长度(所以更加方便!)

  char 数组用于存储一个字符串的char存储单元;string类表示字符串的实体;

   特点: 1. 可以像整型一样,直接赋值;(字符数组不行)

     2. 字符合并相加,arr1 += arr2  (arr2插入arr1尾部)

    字符数组:strncpy(string1, string2,n);string类的字符串拷贝:直接赋值

    字符数组:strncat (string1,string2,n) ;string类的字符串尾插:直接 +=

    字符数组存在溢出危险,string类不担心

   所以字符串处理:string类比字符数组更加简单;

 

   string类的IO:

 

 

 

 

 

 

结构体


struct

C++结构体定义可以省略struct 

由于C++使用string类作为字符串的数据类型,则可以添加到结构体中;

结构体可以作为函数参数和返回值,同类型结构体变量可以相互赋值(即使是数组);

C++结构体除了成员变量,还可以有成员函数;

 

结构体数组:

  struct arr [5]    arr 为数组,并非结构体; arr[0] 为结构体;

  初始化:struct arr[5] = {

        {  },  

        {  },

        {  },

      };

 

结构体位字段:指定占用特定位数的结构体成员

  struct  info {

    u8 :  4;

    boo: 1 ;

  } 

 

 

联合体


union

可以存储不同数据类型,只能同时存储其中一种类型

由于共用体每次只能存储一个值,则它必须有足够的空间来存储最大的值,所以共用体长度为最大成员的长度;

匿名联合体:没有名称,成员位于相同地址处的变量

用途:数据使用多种格式,可节省空间;

 

 

枚举


 enum

enum  tem (a,b,c,d);

abcd 符号常量,代表0~3;常量叫做枚举量

tem  只能被abcd赋值;枚举变量只能被枚举量赋值

枚举量是整型,可被提升为int,但int不能自动转换为枚举类型

枚举量之间不能运算符,要不然为int型;

用处:常用来定义相关的符号常量,如switch语句中使用的符号常量

枚举量赋值:enum tem (a=2,b,c=3,d) 没有赋值的值默认比前一个大1,b=c=3

枚举的范围:

 

 

指针


(地址 + 步长) 

c  int *point  c++ int* point

计算器分配存储地址的内存,不会分配存储指针指向数据的内存;

int *p;  p=(int *)0x00000001;

 

指针:运行阶段分配没命名的内存以存储值;

malloc 分配内存

new  操作符(运行阶段为int分配未命名内存) 堆空间

 new特点:运行时创建,优于编译时创建!

 new创建动态指针:

  设置数据类型,new找到正确的内存块,返回内存块的地址;

  typename  point  =  new  typename ;

   int *p = new int ;

  内存被耗尽,new返回0! 

    内存的释放:delete操作符,将内存归还内存池;

   int *p = new int ;  delete p ;

   一定成对使用,否则发生内存泄漏!(被分配的内存再无法使用,如泄漏严重程序由于不断寻找更多内存而终止)

   (不能释放两次,结果不确定,delete不能释放声明过的内存!)

  new创建动态数组:

   int *p = new int [10] ;(返回第一个元素的地址)

   delete [ ] p ; (new带[],delete带[],new不带[],delete不带[])

   new和delete:delete只释放new分配的内存;

           delete不能对同一内存释放两次;

           new[]为数组分配内存,用delete[]释放;

           new[]为实体分配内存,用delete释放;

           空值指针,delete是安全的

    不能用sizeof来确定动态分配数组的字节数!

    动态数组成员使用:

    int *p = new int [3];

      p[0] = 1;

      p[1] = 2;

 

 指针 + 1 = 指针 + 步长

   

  new创建动态结构:

  创建动态结构:

  struct  info {

    char * name ;

    int age ;

  }

  info* tony = new info; 

  tony->name;

  *(tony).age;

 

 

数据管理内存方式:

  自动存储:

    函数内部定义的常规变量(函数调用自动产生,函数结束自动消失)

    局部变量

 

  静态存储:

    整个程序执行期间一直存在

    方式:函数外定义;关键词static修饰

 

  动态存储:

    new / delete 管理一个内存池,允许一个函数分配另一个函数释放;数据生命周期不受程序或函数的生存时间控制

 

  

 

  

 指针是被设计用来存储地址的变量

 

 

 

控制流


 顺序  选择(if;if...else...;if..else if...else...; switch)  循环(for; while; do...while)

 

C++:for允许for(int i=0;i<num;i++) 程序离开循环,变量消失

i++:当前值计算表达式,然后值加1

++i:当前值加1,然后计算表达式

*++p 指针加1再取值  ++*p 指针取值再加1

*p++   ++优于*

组合赋值操作符:+= -= *= /= %=

逗号表达式的值为第二个值;优先级最低

关系表达式:>, <,  = =,  >=,  <=, != 六种  优先级比算数表达式低

 

for  for  与二维数组

 

  

if:

 

 

逻辑表达式

逻辑操作符 ,用于表达式:&& || !三种  

 && 与 关系操作符,构成取值范围

 

   

 字符函数库 cctype:

  isspace 检测字符是否为空白 isalpha()检测字符是否为字母

  ispunct  检测字符是否为标点 isdigits()检测字符是否为数字

 

 三目运算符:?:  int c = a>b ? a:b  常用来替代if...else 语句

 

 枚举做标签与switch结合

 switch与if..else..区别:

  switch不能处理小数与取值范围

  对于整数,switch比if...else...效率更高

  项数不小于三项用switch

 

break  : 跳出循环(结束循环)只在循环中使用

continue   :跳回循环 (重新循环)

 

文件IO

 

 

 

C++编程模块


 

 函数不能返回数组,可以将数组作为结构或者对象组成部分来返回

可以返回,整型 实型 结构 对象

函数原型自动将被传递的参数强转为期待的类型

 

数组作为函数的形参:void fun(int arr[], int n) ==  void fun(int *arr, int n)   // arr为数组名,n为size

void fun(const int arr[], int n)  不能修改实参数组的数据

1.传统第一个参数提供数组的起始位置,第二个参数提供数组的长度

2.数组区间函数,通过两个指针,第一个参数为数组起始位置,第二个参数为数组的终点位置

 void fun(const int *arr, const int *end);

数组作为函参意义:

 

const 变量的地址可以赋给const指针,但const变量地址不能赋给常规指针

 

函数与二维数组:

  int fun( int(*arr)[ 4 ],  int size) == int fun( int arr[ ][ 4 ], int size)

    arr 为数组指针

 

函数与字符串:

   int fun(const char* arr, char ch)

   返回字符串:

 

 

函数与结构体:

   结构体作为函参:

   结构体作为返值:

    struct info{

      char name[20];

      int name ;

    }

    info fun( info t1, info t2 );

      info fun(info* t1, info* t2);

  

 

函数与string对象:

     string arr [size];  数组的每个元素都为string对象

 

函数与递归:

    自己调自己,容易出现死循环;

 

函数与指针:

   函数指针:void  (*fun)(void)

   指针函数:void *fun(void)

 

 

 函数探幽


 

 

 

 

内联函数:

——————————————————————————————————————————————

《inline 内敛函数》

函数:不断的压栈出栈,再压栈出栈,开销比较大。

宏:预处理阶段展开;不需要压栈出栈,弊端数据不处理。

内联函数:编译器阶段展开;不需要压栈出栈,
  本质:牺牲代码段空间为代价,提高运行的时间效率;
  特点:定义声明加inline
     c++编译器将函数体直接插入到被调用的地方;
     没有普通函数调用时的开销(压栈,跳转,返回)
  弊端:函数不能庞大,循环,判断,取址


计算机速度:cpu(寄存器)>缓存>内存>硬盘>网线

 

 

  运行速度比常规函数快,但占用更多的内存;

 

内联函数不能递归;

—————————————————————————————————————————————— 

 

 

 

 

引用变量:

——————————————————————————————————————————————

   是一种复合类型;

   主要用于函数的形参:函数将使用原始数据,而不是拷贝;

   1. 声明时必须初始化;

   2. &前有数据类型为引用,其他皆为取址

   3. 可对引用再次引用,多次引用只是取别名

   4. 引用与变量地址相同

  int a ;  

  int & b = a;

 

引用作函参:

  值传递导致函数调用使用拷贝;

  引用允许被调函数访问调用函数的变量;

 

引用与结构:

   struct info{

     char name[10];

     int name ;

  };

  const info & fun(info & a);

    const返回引用最佳:意味着不能使用返回的引用直接修改他指向的结构!

    返回引用不能使用临时值,要不然不存在!!

    

 

   遇到一个strcpy的C++问题:

   

   将strcpy_s代替strcpy插入include<cstring>,可以编过

 

 

 

引用与类对象:

   类对象作为函参,常使用引用 !(如string)

  

对象继承与引用:

  

 

 

 

 

 

 

 

默认占位参数:

——————————————————————————————————————————————

《函数的默认参数与占位参数》

默认参数:定义函数参数直接赋值,默认起始从右至左 !

占位参数:没什么意义!

——————————————————————————————————————————————

 

 

 

 

 

函数重载: 

——————————————————————————————————————————————
《函数重载》

函数重载:函名相同,函参不同,缺一不可!
注意:函数重载,不要写默认参数,避免函数冲突!
类型严格匹配,不匹配隐式转换,字符串不行!

编译器:void fun(char a,int b) --> fun_ci
——————————————————————————————————————————————

 

 

 

 

函数模板:

——————————————————————————————————————————————

template<class any>    (typename any)

void fun(any &a,  any& b){

  any temp ;

  temp = a;

  a = b ;

}

 

 

函数重载模板

——————————————————————————————————————————————

template<class any>    (typename any)

void fun(any &a,  any& b);

void fun(any &a,  any& b, int  c)

 

 

 

 内存模型与名称空间


数据存储:自动:  (局部)

 

 

 

     静态:static  (定义的位置至结束)

        外部,内部,无链接性 

 

 

     动态:new / delete  ()

 

 

 

作用域: 局部变量:局部函数

     全局变量:定义位置至结束;

     

 

说明限定符:
auto:声明自动变量
register:声明寄存器存储类型
static:
extern
mutable
const:初始化后,不能进行修改
volatile:
布局new操作符:
命名空间:
对象与类
面向过程:
面向对象:
定义类:
class info {
private:
public:
};
类与结构:
类与结构唯一区别:结构默认public   类默认:private
类中有方法,类创建对象;
同一个类的所有对象,共享同一组类方法;
使用类:
类的 构造函数和析构函数
构造函数:没有类型,返回值
定义:info(int a, char b);
使用:两种  info a = info (1,2,3);
info a = info (1,2,3);
info a = new info(1,2,3)
默认构造函数:
特殊的类成员函数,在创建类对象是被调用,函数名和类名相同,可以函数重载,
析构函数:没有类型,参数,返回值
对构造函数进行清理工作;
每个类只能有一个析构函数;
构造函数使用new,必须使用delete的析构函数;
this指针:
对象数组:
类作用域:
类中变量作用域整个类;
抽象数据类型:
使用类:

操作符重载:
operator op(argument - list)
operator+(); 重载+操作符
友元三友:
友元函数
友元类
友元成员函数
类的动态内存分配

动态内存和类:
new:程序在运行时决定分配内存,而不是在编译时决定;
静态类成员,无论创建多少对象,程序都只创建一个静态类变量副本;
类的继承

基类派生类:一个类派生另一个类,原始为基类,继承为派生类;
派生类对象可以使用基类的方法(方法不是私有);
派生类不能直接访问基类的私有数据,通过基类公有方法访问。
三种继承:
公有继承:建立 is-a 关系
保护继承:
私有继承:
多态公有继承:
访问控制:protected
private与protected区别:只有在派生类才表现,派生类成员可以直接访问基类的保护成员,不能访问私有成员!
抽象基类:
继承和动态分配内存:
元友  异常

元友:
  • 友元函数
  • 友元类
  • 友元成员函数
c++primer ——>310
笔记

main 返回值并不是返回给程序,而是返回给操作系统,0代表成功,非0为异常;
c++ 一般存为int型,除非特殊设置或数据过大!
char 字符和小整数
cout.put() 显示一个字符(句点表示成员操作符)
char 作数值类型,可能是有符号,也可能是无符号;作字符类型,有无符号都没关系
const 与  #define 区别:1.const可以明确的指定类型,2.定义域可以限制在函数中,3.用于更复杂的类型
浮点型优缺点:1.可以表示整数之间的值  2.表示的范围很大    —  1.运算速度比整型慢  2. 精度低 
float C++ 只保证6位有效位
/ 两个都为整数,结果为整数;有一个为小数,结果为小数
常量是没有地址的,如果要取地址,编译器会临时开辟一段空间,让指针只向
C++中,class与struct功能一样,区别在于class默认权限是private,struct默认权限是public !!
C++中,操作符就是运算符 
cout 不能输出 string ? 添加#include<string>

转载于:https://www.cnblogs.com/panda-w/p/11325118.html

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

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

相关文章

静态路由的实现

在路由器A上做如下配置&#xff1a;router(config)#hostname AA(config)#interface f0/0A(config-if)#ip address 192.168.1.1 255.255.255.0 A(config-if)#no shutdownA(config)#interface f0/1A(config-if)#ip address 192.168.2.1 255.255.255.0 A(config-if)#no shutdownA(…

2019-08-09 纪中NOIP模拟赛B组

T1 [JZOJ1035] 粉刷匠 题目描述 windy有N条木板需要被粉刷。 每条木板被分为M个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷&#xff0c;只能选择一条木板上一段连续的格子&#xff0c;然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次&#x…

vue3实现打字机的效果

前言&#xff1a; vue3项目中实现打字机的效果。 实现效果&#xff1a; 实现步骤&#xff1a; 1、安装插件 npm i vue3typed 2、main.js中配置 import vuetyped from vue3typedconst app createApp(App) // 挂载打字机的全局方法 app.use(vuetyped) 3、界面使用 <vuet…

hightopo学习系列:hightopo介绍(一)

起因 新的软件主管来公司以后&#xff0c;有整整2周的时间没有搭理前端开发。就在这周一快下班的时候&#xff0c;突然和我说话了。问了我一些以前用的图形库&#xff0c;并让我开始了解hightopo。甩给了我一个全拼&#xff0c;就拂袖而去&#xff0c;留下一脸懵逼的我。 没办…

Unity工程无代码化

目的 Unity默认是将代码放入工程&#xff0c;这样容易带来一些问题。1. 代码和资源混合&#xff0c;职能之间容易互相误改。2. 当代码量膨胀到一定程度后&#xff0c;代码的编译时间长到无法忍受。新版的unity支持通过asmdef来将代码分成多个dll工程&#xff0c;有所缓解。所以…

曾国藩传 读后感

转载于:https://www.cnblogs.com/eat-too-much/p/11335113.html

深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)

深入C#学习系列一&#xff1a;序列化(Serialize)、反序列化(Deserialize) 序列化又称串行化&#xff0c;是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化&#xff0c;或者将这种对象从一个地方传输到另一个地方。.NET框架提供了两…

十一月·飘·立冬

十一月的南粤叶依然青翠在枝头与秋风和舞落叶遍地的诗意画面在博客生活逝如流年 渐走渐淡回忆飘然而来又飘然而去秋的最后一天放下回忆 飘去天涯飘不要说也不要问目光交错的一瞬注定了今生缘分此情可以见真心春风急 秋风也狠乱乱纷纷 是红尘浮浮沉沉 似幻似真金枝玉叶的结…

Centos 系统安装NetCore SDK命令以及一系列操作(1)

17年买的jesse老师的课程&#xff0c;虽然说NetCore出来很久了&#xff0c;自己打入行的时候就奔它去的&#xff0c;但。。。。废话不说了&#xff0c;还是自己做了再说吧&#xff0c; 首先需要一个Centos系统来让我们开始玩&#xff0c;下载地址&#xff1a;https://www.cento…

如何高效地判断奇数和偶数

在我们日常的编程当中&#xff0c;常常会遇到判断某个整数属于奇数还是偶数的情况。 大家一般的处理做法是用这个整数和2取模。然后判断是等于1还是等于0。 这里&#xff0c;我要为大家介绍一种快速有效的判断做法&#xff0c;利用2进制进行判断。 大家都知道&#xff0c;奇数的…

Windows Azure Traffic Manager (6) 使用Traffic Manager,实现本地应用+云端应用的高可用...

《Windows Azure Platform 系列文章目录》 注意&#xff1a;本文介绍的是使用国内由世纪互联运维的Azure China服务。 以前的Traffic Manager&#xff0c;背后的Service Endpoint必须是Azure数据中心的Cloud Service。 现在最新的Traffic Manager&#xff0c;Endpoint不仅仅支持…

Windows Azure Cloud Service (17) Role Endpoint

《Windows Azure Platform 系列文章目录》 在Windows Azure平台中&#xff0c;用户最多可以对以个Role指定5个Endpoint。而一个Hosted Service最多允许包含5个Role,所以说在一个Hosted Service中用户最多能定义25个Endpoint。 而对于每一个Endpoint&#xff0c;使用者需要设定如…

sentry + vue实现错误日志监控

起因 项目采用vue全家桶开发&#xff0c;现在拟嵌入sentry&#xff0c;实现对于线上网站进行错误日志记录。其实上传日志很简单&#xff0c;基本配置就可以了&#xff0c;但是上传配套的sourcemap则颇为费劲。这里记录一下使用心得。 实施步骤 上传日志 sentry使用文档&…

OSPF单域实验报告

1.1 实验任务<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />(1) 配置Loopback地址作为路由器的ID。(2) 配置OSPF的进程并在相应的接口上启用。(3) OSPF起来后&#xff0c;更新计时器。1.2 实验环境和网络拓扑<?xm…

sql server 2005 COUNT_BIG (Transact-SQL)

返回组中的项数。COUNT_BIG 的用法与 COUNT 函数类似。两个函数唯一的差别是它们的返回值。COUNT_BIG 始终返回 bigint 数据类型值。COUNT 始终返回 int 数据类型值。后面可能跟随 OVER 子句。 Transact-SQL 语法约定 语法 COUNT_BIG ( { [ ALL | DISTINCT ] expression } | * …

《浏览器播放RTSP方案》之 VLC插件播放RTSP视频流

VLC插件播放RTSP视频流多版本chrome安装安装vlc软件开启浏览器的NPAPI设置编写测试页插件设置其他问题最后目前网页对于RTSP流直接播放不支持&#xff0c;目前有插件和转流两种方式&#xff0c;这里针对vlc插件播放做一个简单的梳理。 查看官网教程 vlcWebPlugin, 得知其浏览器…

通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行(转)

本文将讨论&#xff1a; • 缓存和 Forms 身份验证 • 视图状态和会话状态 • 配置文件属性序列化 • 线程池饱和 • 模拟和设置配置文件 本文使用了下列技术&#xff1a; .NET Framework、ASP.NET、Windows Server 2003 本页内容 LoadControl 和输出缓存会话和输出缓存Fo…

如何去掉DataTable中的重复行(新增.net 2.0中最新解决方法---简便)

.net 1.1中的解决方法(转)1建立一个DataSetHelper类(DataSetHelper.cs) publicclassDataSetHelper...{ public DataSet ds; public DataSetHelper(ref DataSet DataSet) ...{ ds DataSet; } public DataSetHelper() ...{ ds null; } p…

Centos 系统安装NetCore SDK命令以及一系列操作(2)

ok,接下来安装dotnetCore的SDK&#xff0c;访问&#xff1a;https://dotnet.microsoft.com/download&#xff0c; 如下图&#xff0c;选择Linux&#xff0c; 选择一下这个Linux的发行版&#xff0c;我们选择Centos就行&#xff0c;然后执行这些命令去安装SDK&#xff0c;地址如…

这该死的高度,height,clientHeight,scrollHeight,offsetHeight

引言: 虽然有时候界面的设置不是我们这些后台代码人员的工作,但是有时候却难以理解控件生成时的一些怪事,比方在学习webabcd的扩张GridView中固定列时,你或许已经被其中的height,clientHeight,scrollHeight,offsetheight弄得晕晕的了,当然这些都是网页制作的一个基础,将其记下,…