时间:2019年10月17日 | 作者 : aaronyang | 分类 : C++ | 浏览: 4328次 | 评论 0 人
我使用的vs2019
选择空项目,下一步,创建
源文件,文件夹新建一个C++文件
// 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回车
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(); }
你可以使用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;
转义字符一致的
还有指定字面值的类型
L'a' 指定宽字符型字面值,类型是wchar_t
u8"h" utf-8字符串字面值
42ULL 无符号整型字面值 unsigned long long
1E-3F float类型
3.14159L long double类型
变量
和C#比较,数字都一样的声明和定义
字符串可以这样赋值
对象的定义:一块能存储数据并具有某种类型的内存空间
初始化和赋值
初始化是创建一个变量赋予一个初始值。
赋值:是把对象的当前值擦除,一个新值替代
初始化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++可以取一样的名字的变量
如果想调用全局的,前面加2个冒号
题目2
引用 使用&符号,等同于C#的 ref效果
也可以这样写
引用时候,必须是对象赋值,必须是一个类型
指针
跟引用一样,实现了对其他对象的间接访问。
指针本身是对象,允许对指针赋值和拷贝。指针无需定义时赋初始值。
获取对象地址:
取地址符号&
int intvalue = 10;
int* p = &intvalue; //p是存放变量intvalue的地址
第二句把p定义为一个指向int的指针。随后初始化p令其指向名为intvalue的int对象。
指针的值(地址) 4种状态:
指向一个对象
指向紧邻对象所占空间的下一个位置。
空指针,没有指向任何对象
无效指针,上述3条之外的其他值
利用指针访问对象
x
下面的*p的*号是解引用符
*p=0;
cout<<*p;
和引用一样,对*p赋值,实际上是为p所指的对象赋值。
解引用适用于 那些确实指向了某个对象的有效指针
空指针写法
nullptr是C++ 11 新加的。以前也有用NULL的,建议用nullptr
条件判断,任何非0指针的条件值都是true
false说明是空指针
void* 指针
可以存放任意对象的地址。
double obj=3.14,*pd=&obj;
void* pv=&obj;
pv=pd;
指向指针的指针
解指针也一样,解第一次指针,是一个指针对象,再解一次,就能访问最原始的值
指向指针的引用
引用本身不是一个对象,因为不能定义指向引用的指针,
但是指针是对象,所有存在对指针的引用。
可以理解
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了。
、
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,兴趣学习flutter
目前在合肥市某公司上班,已经厌弃,如果你的公司看的上我,加我QQ私聊
AYUI8全源码 Github地址:前往获取
杨洋(AaronYang简称AY,安徽六安人)和AY交流
高中学历,2010年开始web开发,2015年1月17日开始学习WPF
声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费
不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo
查看捐赠AYUI7.X MVC教程 更新如下:
第一课 第二课 程序加密教程
额 本文暂时没人评论 来添加一个吧
发表评论