当前位置:网站首页 / C++ / 正文

AY的VS2019 的C++11笔记[1]

时间:2019年10月17日 | 作者 : aaronyang | 分类 : C++ | 浏览: 4436次 | 评论 0

我使用的vs2019

image.png

选择空项目,下一步,创建

image.png

源文件,文件夹新建一个C++文件

image.png

// Test1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
using namespace std;
int main()
{
	int number1;
	cout << "hello ay";
	cout << endl;
	cout << "欢迎来到C++的世界" << endl;
	cin >> number1;
    cout << "Hello World!\n";
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

F5运行,输入1回车

image.png


cin是等待输入

cout输出


第二个例子

#include <iostream>
using namespace std;
int main()
{
	//int number1;
	//cout << "hello ay";
	//cout << endl;
	//cout << "欢迎来到C++的世界" << endl;
	//cin >> number1;
 //   cout << "Hello World!\n";

	cout << "请输入第1个数字" << endl;
	int num1;
	int num2;
	cin >> num1;
	cout << "请输入第2个数字" << endl;
	cin >> num2;
	int num3 = num1 + num2;
	cout << "两个数字的和是:" << num3 << endl;

	cout << "√9等于:" << sqrt(9) << endl;  // =>根号9 输出3 


	//cin >> num2;
	cin.get();
	cin.get();
}

image.png

你可以使用cin.get()但是需要两条cin.get(),这样你才能在屏幕上看到输出,第一条cin.get()语句在您输入数字按Enter键读取输入,而第二条cin.get()语句让程序暂停,直到您按Enter键

sqrt这些 vs2019貌似都不用自己显示引用了 

#include <cmath>

这里注意不同的编译器,不同的引入方式, 老式的编译器可能需要math.h这样引入了.



if,while,for 和C#都一致的


数据类型

C++11增加了 long long类型至少64位,可以存储地球和银河系的星星数,byte通常指8位的内存单元.short 16位,int 32位 long 64.

char类型8位字符(1个char和一个机器字节一样大),wchar_t 16宽字符(用多个字节来代表的字符称之为宽字符)

char16_t 16位unicode字符   

char32_t 32位unicode字符

float(6位有效数字) double是10位

long double 扩展精度浮点数 也是10位(特殊浮点要求的硬件会用到)



可寻址的最小内存块叫字节(byte),存储的基本单元叫字(word),,由几个字节组成,1个字节要能容纳基本字符集的字符。

大多数计算机一个字节 8比特构成

1byte=8bit

byte+byte+...+byte=word

字由32或者64比特构成,也就是4字节或者8字节

存起来后,有个地址记录 存储数据的位置,叫内存地址


AY笔记:1个字你记32比特(4个字节)


带符号和无符号类型

unsigned short

unsigned long long

unsigned int=unsigned

unsigned long

带符号类型可以表示 正数负数和0

无符号的类型只能表示 >=0的值

char 也有无符号

char 

signed char

unsigned char

char和signed char是由编译器决定的,并不一样。


无符号类型中所有比特用于存储值,8比特unsigned char可以存储0-255内的值,最大值:2的8次方

8比特的signed char 是理论上-127到127,大多数是 -128到127


和C一样,C++的设计接近硬件

char类型在有的机器有符号,有的没符号的。



类型转换

隐式转换和C#一样

无符号给 有符号类型,是 初始值对无符号类型表示数值总数取模后的余数

比如 unsigned char c=-1; //值为255 

unsigned char 是8位的,最大值 2的8次方,即256,然后加上它的-1,就是255了


signed char c=256;

超出范围的,值为 未定义 undefined

程序继续工作,可能崩溃,生成垃圾数据


这里有个取模运算

求余数 36%10=6

取模运算 mod(36,-10)=-4

     36最多只能上3余6,这里最接近的数字是 4,上4等于40 ,40-36=4,然后取运算符是符号,所以-4



无符号类型和有符号的 运算,也有可能出错

unsigned u=10;

int i=-42;

i+i=等于-84

但是

u+i = 4294967264

因为  有符号可以转换为无符号的

int 假设32位的,8的32次方等于 4294967296

然后加上它的-42,等于 4296967254

然后加上u的值10=4294967264



字符串多行书写

	cout << "AY"
		" 1991 2019" << endl;

image.png

转义字符一致的


还有指定字面值的类型

L'a' 指定宽字符型字面值,类型是wchar_t

u8"h" utf-8字符串字面值

42ULL 无符号整型字面值 unsigned long long

1E-3F float类型

3.14159L long double类型





变量

和C#比较,数字都一样的声明和定义

字符串可以这样赋值

image.png

对象的定义:一块能存储数据并具有某种类型的内存空间


初始化和赋值

初始化是创建一个变量赋予一个初始值。

赋值:是把对象的当前值擦除,一个新值替代


初始化4种写法

int a=0;

int a={0};

int a{0};

int a(0);


有些需要你显示初始化值,比如字符串,你不初始化,就是空串,未定义,其他你自己的类也是未定义的

如果是数字,默认0




声明和定义

C++ 支持分离式编译。每个文件可以独立编译

声明

extern int i; //声明i而非定义i

int j; //声明并定义j


extern double pi=3.1415 //定义

函数内不允许 用extern

只能定义一次


标识符和C#一样,变量命名啥的

作用域的话,C++可以取一样的名字的变量

image.png

如果想调用全局的,前面加2个冒号

image.png

题目2

image.png



复合类型

引用 使用&符号,等同于C#的 ref效果

image.png

也可以这样写

image.png

引用时候,必须是对象赋值,必须是一个类型

image.png


指针

跟引用一样,实现了对其他对象的间接访问。

指针本身是对象,允许对指针赋值和拷贝。指针无需定义时赋初始值。


获取对象地址:

取地址符号&

int intvalue = 10;

int* p = &intvalue; //p是存放变量intvalue的地址

第二句把p定义为一个指向int的指针。随后初始化p令其指向名为intvalue的int对象。


指针的值(地址) 4种状态:

指向一个对象

指向紧邻对象所占空间的下一个位置。

空指针,没有指向任何对象

无效指针,上述3条之外的其他值



利用指针访问对象

image.pngx

下面的*p的*号是解引用符


*p=0;

cout<<*p;

和引用一样,对*p赋值,实际上是为p所指的对象赋值。

解引用适用于 那些确实指向了某个对象的有效指针


空指针写法

image.png

nullptr是C++ 11 新加的。以前也有用NULL的,建议用nullptr



条件判断,任何非0指针的条件值都是true

false说明是空指针


void* 指针

可以存放任意对象的地址。

double obj=3.14,*pd=&obj;

void* pv=&obj;

pv=pd;



指向指针的指针

image.png

解指针也一样,解第一次指针,是一个指针对象,再解一次,就能访问最原始的值

image.png

指向指针的引用

引用本身不是一个对象,因为不能定义指向引用的指针,

但是指针是对象,所有存在对指针的引用。


可以理解 

int a=1;

int &b=a;

这是对普通的对象的引用,对于指针对象的写法

int *p;

int *&r=p;


举个例子

int i=42;

int *p;

int *&r=p;

这里r是对一个指针的引用, 可以理解r就是*p的额外的写法

所以

r=&i 就等于 *p=&i; 就是把p指针 指向了 i这个位置了。

*r =0;

解引用 *r 就是得到了 就是 *p的解引用,就是得到i对象。

就是把i=0了。


image.png


 AYUI       www.ayjs.net      AY         杨洋原创编写,请不要转载谢谢


const限定符

跟C#一样的,放在类型前面,表示只读的变量

如果多个文件之间共享const对象

必须要在定义之前添加extern关键字

头文件中,extern const int bufsize;

其他文件中,extern const int bufsize=fun();


对const的应用,

const int ci=1024;

const int &ri=ci;//正确

不能二次赋值,不能 把常量给一个非常量类型的 对象,比如 int &r2=ci;



指向常量的指针

可以实现1个值2个变量符号,感觉没啥意义

主要例子

int a=0;

int *const cura=&a;


const double b=1;

const double *const pip=&b;


顶层const

指针本身是个常量

底层const

指针所指的对象是一个常量



constexpr常量表达式

值不会改变并且在编译过程就能得到计算结果的表达式

const int max_files=20;

const int limit=max_files+1; //是常量表达式

int cc=27 //不是常量表达式

const int sz=get_size();//不是,值要到运行时才知道。


constexpr变量

你可以使用constexpr 标记

constexpr int i=20;//20是常量表达式

constexpr int limit=i+1; //是常量表达式

constexpr int sz=get_size();/只有当size是一个constexpr函数时候,才是一条正确的声明语句


字面值类型可以 constexpr修饰, 算数,引用,指针都属于字面值类型。

一个constexpr指针,初始值必须是nullptr或者0,或者存储某个固定地址中的对象



typedef类型别名

typedef double wages;

typedef wages base,*p;

C++11 可以

using s1=Sales_item, 别名声明


auto类型

C++11 增加的

类似C#/js的var



decltype 拷贝一个实例的类型

选择并返回操作数的数据类型,这样就可以声明同类型的对象了。

const int ci=0,&cj=ci;

decltype(ci) x=0;//正确

decltype(cj) y=x; //正确

decltype(cj) z; //错误,引用类型要初始化



decltype((variable))  结果永远是一个引用

decltype(variable)结果只有当variable本身就是一个引用时才是引用




自定义一个类型

struct aa{

 string bookno;

unsigned unit=0;

}


aa aa1,*aa2;


跟C#一样,点号表示层级,可以拿属性




还有个就是编写头文件。

#ifndef aa_H

#define aa_H

#include <string>

struct bb{

...

}

#endif



 AYUI       www.ayjs.net      AY         杨洋原创编写,请不要转载谢谢







www.ayjs.net 六安杨洋(AY)拓展

推荐您阅读更多有关于“C++,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf

目前在合肥企迈科技公司上班,加我QQ私聊

2023年11月网站停运,将搬到CSDN上

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表