编程基础

关键词:编译器会将其视作为具有特殊意义的名称,在声明变量、函数名称时,不可与关键词相同。

C++内建数据类型:
是我们编程的基石(整形、浮点型),但若是只使用基础的数据类型来编程,远远不够,麻烦冗余。为此有类的概念,增强抽象层次。
字符常量:可打印字符、不可打印字符(用字符序列来表示)。
字符串常量:可包含可打印字符和不可打印字符。
类:
分为两部分,头文件和实现文件,头文件用于表示类所提供的各种操作,实现文件是类的操作具体实现内容。使用类,需要包含头文件

对象定义与初始化:定义对象的时候,为什么一定要写明所属的数据类型呢?为了在编译的时候就能够分配内存空间。在使用变量前要保证为其进行初始化。初始化语法:赋值运算符,构造函数语法。这里,如果是自定义的类型,包含多个数据成员,此时初始化无法使用=来进行,而是需要调用类的构造函数。对于模板来说,我们大多数的情况下未实例化前是不知道数据类型的,但需要使用类型参数的变量来做初始化操作,如果对于内建的数据类型和自定义的类型初始化的语法不同,那么模板该如何写???为此编译器统一了初始化语法,因此对于内建的基本数据类型,也可以使用构造函数语法进行初始化。
常量:程序运行的过程中,值不会发生变化,使用const修饰,以保证我们无意修改常量值时编译器能帮助我们发现问题。

表达式:由一个或多个运算对象构成,运算对象之间通过运算符连接起来。求解表达式会得到一个值。
运算符:算术(加减乘除模)、关系、逻辑、复合(对某个对象进行操作并将结果重新赋给该对象)、条件。

条件运算符:表达式?***:****
非0数即是true;0即是false。
递增(递减)前置、后置区别:
先对原值进行运算,再来做其他运算,或是相反的操作。
关系运算符:
在这里插入图片描述逻辑运算符:
&&(骤死式评估法)、||(骤死式评估法)、!,用来连接多个关系表达式,是多个if…else if的等效替代形式。
&& 和||连接的表达式是有顺序的

运算符优先级:
一个表达式有多个运算符,那么该如何确定运算顺序?除了为运算符添加优先级,还有更好的方法吗?!编译器可以为我们确定一个运算次序,可是那个次序并不是我们所期待的,为此我们可使用()来改变运算次序。
在这里插入图片描述

函数:独立的代码序列,由4部分构成:返回类型、函数名、参数列表、函数体。需要特别地来理解一下main()返回值:当返回0时代表函数正常执行,当返回非0值时代表函数执行过程出错。函数名不可与关键词相同,符合命名规则且能表达含义。参数列表表示了调用者可以传递给函数的参数类型和个数。函数体即是函数所执行的操作。

输入输出:
并非是C++语言本身所定义的部分,而是由类体系所支持。(属于标准程序库一部分)
cin、cout标准输入输出对象,能进行合适的类型转化。(当操作数是基本类型时),如果是自定义类型,我们需要为自己的编写的类重载<<、>>运算符。(友元函数)

命名空间:
为了避免名称冲突(程序中两个不同的实体有相同的名称),由此产生了名称空间的概念。将程序库的名称封装起来。标准程序库所提供的类,对象,方法,函数都被封装在名称空间std中。

下例是关于简单的输入输出,getline()、标准输入输出的理解。

#include "stdafx.h"
#include<iostream>
#include<string>

int main()
{
	using std::cout;
	using std::cin;
	//std::string name;
	//std::cin >> name;
	//getline(std::cin,name);
	using std::string;
	string firstname;
	string lastname;
	cout << "enter first name :";
	getline(cin, firstname);
	cout << "enter last name :";
	getline(cin, lastname);
	//std::cin >> firstname >> lastname;
	cout << "\nhello " << firstname<<" , "<<lastname<< " welcome to C++!\n";
	std::cin.get();
	//std::cin.get();
    return 0;
}

从对象定义初始化、书写表达式到形成语句,程序都只是按照固定的顺序执行着,有没有觉得太单调?要说人是高级动物,不外乎我们可以做出根据合适的条件思考进而做出选择,为了让程序聪明一点点,自身也是加入了条件语句和循环语句。根据条件来选择执行与否、是否多次执行。

条件语句:
if 对应的else子句的两种形式:
仅有两种情况且只有一个成立:
在这里插入图片描述
至少三种情况,且只有一个成立,一旦一个成立了,之后的都不用再判断:
在这里插入图片描述测试条件属于整形时,可使用switch…case代替if…else if。
swtich(整形表达式){
case 常量表达式:
****
break;
default:
}
向下穿越

循环语句:
while先测试条件,成真时执行代码段,在代码段内的某一条件成真下修改循环语句所控制的条件为false,在循环体内肯定是需要配合条件语句来改变循环语句中条件。
break终止循环
continue停止循环的现行迭代,重新判断循环条件决定是否执行循环体
for循环,适用于修改计数器、知道循环次数的循环语句,如果一开始的条件就是false,那么expression就不会被执行到。
在这里插入图片描述
指针的好处:
既可以表示地址,也可以获取地址空间内的值。使用指针解除引用时要格外注意的问题,是否为空指针,该地址值并不知向任何类型的数据。若是仍对空指针解除引用,程序发生什么就不一定了。。。
对于指针还想使用下标运算符,先对指针解除引用,在使用下标运算符即可。但此时,下标运算符的优先级更高,因此需使用小括号改变优先级。
在这里插入图片描述文件的输入输出:
只是对一个文件进行读操作,使用ifstream类即可,此时文件读取的位置位于文件头,只是对文件进行写操作,使用ostream类即可,但此时根据使用文件的模式,文件指针位于不同的位置,ios::out模式下文件指针位于头部(删除原有文件内容),ios::app模式下文件指针位于文件末尾。同时读写一个文件,使用fstream类,此时写模式设置为ios::app,但此时读取文件存在问题,文件指针位于末尾,此时使用seekg()将文件位置位于起始处。但写入时会追加到文件末尾。

//练习1.6
#include "stdafx.h"
#include<vector>
#include<iostream>
#include<algorithm>
#include<iterator>
using namespace std;
const int SIZE = 100;

int main()
{
	int a[SIZE];
	vector<int > b(SIZE);
	int n;
	int count = 0;
	while (cin >> n)
	{
		if (count>SIZE)
		{
			break;
		}
		a[count] = n;
		b[count++] = n;
	}
	for (int i = 0; i < count; i++)
		cout << a[i] << " ";
	cout << endl;
	for (auto x : b)
		cout << x << " ";
	cout << endl;
	cin.clear();
	cout<<(char )cin.get();//类型不符合的字符没有被抽走 自然之后的字符更不会被抽走
	cin.get();
	//cout<<(char )cin.get();
	cin.get();
    return 0;
}

有一个程序尚未解决。。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值