解决方案的文件类型
- .sln:记录着关于解决方案中项目的信息。
- .suo:其中记录着应用于该解决方案的用户选项。
- .sdf:记录着与解决方案的Intellisense有关的数据。Intellisense是在Editor窗口中输入代码时提供自动完成的提示功能的工具。
- .opensdf:记录着关于项目状态的信息。此文件只是在项目处于打开状态时才有。
#include指令。
该指令将stdafx.h文件的内容添加到这个文件中,以代替这条#include指令。在C++程序中,这是将.h源文件的内容添加到.cpp源文件的标准方法。
在项目属性General面板中选中Character Set属性。设置为Not Set。本地C++控制台程序,都应该这么做。
程序注释
/* Ex2_01.cpp */
使用//的注释只包括这一行中两个连续斜杠后面的部分,而/…/这种形式将包含在/和/之间的所有内容定义为注释,而且可以跨越几行。
#include指令–头文件
如果文件名是用尖括号括起来的,则编译器只搜索它预计查找标准文件的目录。因此,当您想要在源文件中包含一个标准头文件时,应该将文件名用尖括号括起来,因为这样的搜索速度更快。而当您要包含其他头文件,一般是自己创建的头文件时,则应该将文件名用双引号引起来:否则,根本找不到。
基本数据类型
- 整形类型:int tempCount = 10;int tempCount(10);后面为函数表示法
- 字符类型:char letter = ‘A’;char letter(‘A’);char letter = 65;由于字符’A’是由ASCII码表示的十进制数值65,因此可以如最后一种方法表示。
- 宽字符类型:wchar_t = letter = L’Z’;wchar_t letter(0X5A);
注意:不要写具有前置零的十进制整数值。编译器将把这样的值作为八进制(基数为8的数字系统)翻译,所以写成065的值将等同于正常十进制表示法中的53.
整形修饰符
如果确信不需要在变量中存储负值,则可以把变量指定为
unsigned,unsigned long mileage = 0UL;
浮点类型:double in_to_mm = 25.4;float pi = 3.14159f;
定义数据类型的同义词
typedef关键字能够使您为现有的类型定义自己的类型名称。typedef long int BigOnes;BigOnes mynum = 0L;同等于long int mynum = 0L;
具有特定值集的变量
enum Week{Mon, Tues, Wed, Thurs, Fri, Sat, Sun} thisWeek;第一个名称值0,依次递增。
从键盘输入
std::cin >> num1 >> num2;忽略空白一次读取一个数字。
输出到命令行
std::cout << num1;将数字输出到命令行中。
赋值语句
whole = part1 + part2 + part3;连续赋值语句a = b = 2;
算术运算符号 + - * /
const修饰符
const double rollWidth = 21.0;表明变量不仅是double类型,而且是常量。
const double rollArea = rollWidth * rollLength;常量表达式,可由常量进行计算。
强制类型转换
static_cast(value);
查看类型
typeid(value).name();
位运算符
& 按位与(AND) 有0就为0否则为1
| 按位或(OR) 有1就为1否则为0
^ 按位异或(EOR) 全相同就为0否则就为1
~ 按位取反(NOT) (只需要一个操作数)1变0,0变1 value = ~value;
>> 右移 向右移动位数,出边界的丢失,尾部添0补充 value >>= 2;
<< 左移 向左移动位数,出边界的丢失,尾部添0补充 value <<= 2;
lvalue和rvalue
C++中每个表达式的结果或者是lvalue,或者是rvalue。有时,他们也分别写作l-value和r-value,但读音不变。lvalue指的是内存中持续存储数据的一个地址。而rvalue是临时存储的表达式结果。
存储时间
自动存储时间(出生于它被定义之时,在代码块结束时自动消失)
静态存储时间(从程序开始时存在,直到程序执行结束时为止)
动态存储时间
作用域解析运算符
作用域解析运算符(::)
using命名空间
using namespace std;将来自std名称空间的所有名称导入源文件
using std::cout;导入单个名称
声明数组
long height[6];height[5] = 3;
int cubic_inches[5] = {200, 250, 300, 350, 400};
long data[100] = {0};将100个元素初始化为0。
int value[] = {2, 3, 4};初始化3个长度的数组。
字符数组
char movie_star[15] = “Marilyn Monroe”;
char president[] = “Ulysses Grant”;
wchar_t president[] = L”Ulysses Grant”;创建由Unicode字符组成的字符串。
long data[2][4] = {{1, 2, 3, 5}, {7, 11, 13, 17}};多维数组
指针的概念
用来存储数据的各个内存位置都有地址。地址给PC硬件提供了引用具体数据项的途径。指针变量存储特定类型的另一个变量的地址。就像其他变量一样,指针变量也有名称,而且指针还有类型,以指出其内容引用的是什么类型的变量。注意,指针变量的类型隐含着该变量是指针的事实。如果某个指针变量可以保存包含int类型值的位置的地址,则该变量的类型是“指向int”类型的指针。
声明指针*
long* pnumber;在C++中,使用以字母p开始的变量名表示指针是通用惯例。
取值运算符&
pnumber = &number;用于获得变量的地址。
间接寻址运算符*
*pnumber += 1;
初始化指针,使用指针必须初始化,最好在其声明的时候就直接初始化。
int number = 10;
int* pnumber = &number;
int* pnumber = nullptr;//赋值空指针。
sizeof操作符,获取内存占用大小。
指针使用注意
不能修改被指向的对象,但可以使指针指向其他对象:const char* pstring = “Some text”;
不能修改指针中存储地址,但可以修改指针指向的对象:char* const pstring = “Some text”;
指针和被指向的对象都被定义成常量,因此都不能被修改:const char* const pstring = “Some text”;
函数结构
函数头
double power(double x,int n)
返回值类型(本例中是double)
函数名(本例中是power)
圆括号中的函数形参(本例中是x和n,分别为double和int类型)
函数体
在函数调用中实参会替换函数定义中出现的形参。
函数原型
函数原型给编译器提供了检查我们是否在正确使用函数而需要的基本信息。函数原型指定要传递给函数的形参、函数名和返回值类型,基本上包含出现在函数头中的相同信息,只是增加一个分号。显然,函数定义中函数头包含的形参数量和类型必须与函数原型相同。
给函数传递实参
按值传递机制:在按值传递机制中,我们指定的变量、常量或表达式值作为实参根本没有被传递给函数。而是创建这些实参的副本,并将这些副本作为被传递的值。按值传递机制的后果之一是函数不能直接修改被传递的实参。
给函数传递指针实参:当使用指针作为实参时,按值传递机制仍然像以前一样工作。但指针是另一个变量的地址,如果创建该地址的副本,则副本仍然指向相同的变量。
int incr10(int* num);
int* pnum = #int result = incr10(pnum);
数组是唯一不能按值传递的类型:编译器将数组名转换为指针,指向数组头部的指针副本通过按值传递机制被传递给函数。
double average(double* array, int count);
double values[] = {1.0, 2.0, 3.0, 4.0, 5.0};
average(values, (sizeof values)/(sizeof vlaues[0]));
double average(double* array, int count) {
double sum = 0.0;
for(int i = 0; i < count; i++) {
sum += *array++;
}
return sum/count;
}
按引用传递
将函数的某个形参指定为引用,将改变给该形参传递数据的方法。使用的方法不是按值传递-其中在传递给函数之前复制实参,而是按引用传递,即形参扮演被传递实参的别名角色。该机制消除了对提供的实参的任何复制工作,允许函数直接访问调用函数中的实参。同时意味着,传递和使用指向值的指针时所需的取消引用操作也是多余的。
int incr10(int& num);
int value = 6;
result = incr10(value);
int incr10(int& num) {
num += 10;
return num;
}
使用const修饰符
可以给函数的形参使用const修饰符,以告诉编译器我们不想以任何方式修改这个形参。
int incr10(const int& num);
rvalue形参
具有rvalue引用形参的函数只能被rvalue实参调用。
int incr10(int&& num);
result = incr10(value + num);result = incr10(5);
返回指针
永远不要从函数中返回局部自动变量的地址。
return &value;
double* treble(double data) {
double* result = new double(0.0);
*result = 3.0 * data;
return result;
}
返回引用指针
lowest(array, len) = 6.9;
double& lowest(double a[], int len) {
int j(0);
for(int i = 1; i < len; i++) {
if(a[j] > a[i]) {
j = i;
}
}
return a[j];
}
函数中的静态变量
例如,计算调用函数的次数。
static int count = 0;
声明函数指针
double (pfun)(char, int);
包围指针名称pfun的圆括号和星号都是必不可少的。
long (*pdo_it)(long, long);
pdo_it(3, 5);
以函数指针作为实参
double sumarray(double array[], int len, double (*pfun)(double)) {
double total = 0.0;
for(int i = 0; i < len; i++) {
total += pfun(array[i]);
}
return total;
}
函数指针的数组
double sum(double, double);
double product(double, double);
double (*pfun[2])(double, double) = {sum, product};
pfun[0](2.5, 3.5);
初始化函数形参
void showit(const char message[] = “Something is wrong”);
异常
try
{
…
throw “Message”;
}
catch(const char eMessage[])
{
…
}
捕获任何异常
catch(…)
{
}
函数模板
template<class T> T max(T x[], int len) {
T maximum(x[0]);
for(int i = 1; i < len; i++) {
if(maximum < x[i])
maximum = x[i];
}
return maximum;
}
float max(float, int);
使用decltype操作符
数据结构
struct BOOK {
char Title[80];
char Author[80];
char Publisher[80];
int Year;
};
访问结构的成员
成员选择操作符号“.”
指针访问结构
RECT aRect = {0, 0, 100, 100};
RECT* pRect(&aRect);
(*pRect).Top += 10;
内联函数
在函数头前面加上关键字inline;
本文介绍了C++编程的基础知识,包括文件类型、预处理指令、基本数据类型、输入输出操作、指针概念、函数结构等内容。

7337

被折叠的 条评论
为什么被折叠?



