每个语言都是一上来首先讲讲历史,发展,然后讲一下最基本的输入输出,就开始讲他的内置类型,因为至于学会了他的内置类型,才能进行后面的进一步学习,比如各种控制语句,然后再学习复杂一点的内置复合类型,学学函数,深入学学输入输出,,然后学学库函数啥的,就没了。所以语言是工具,其实语言本身的东西并不多,重要的是用这个语言去创造很多新的东西。
#include<iostream> // 预处理器编译指令,用cin,cout就必须加入这个文件,因为iostream文件里有很多关于输入输出的定义
int main() // 函数头
{ // 函数体开始
using namespace std; // using编译指令,使用std名称空间的定义,使得iostream中的定义对程序可见,不必使用std::前缀
cout << "Come up and C++ me some time.";
cout << endl; // 换行,输出一个空行
cout << "You won't regret it!" << endl;
return 0; // 终止main函数
}// 函数体结束
Come up and C++ me some time.
You won't regret it!
函数分为函数头和函数体,函数头描述了函数和调用它的函数的接口
main()函数被启动代码(由编译器添加到程序中,是OS和APP的bridge)调用,所以int main()这个函数头描述了main函数和OS的接口
一个c++程序必须有一个main函数,否则编译器报错
Windows的动态链接库: DLL,是其他Windows程序可以使用的代码,他并不是独立的程序,不需要main函数
预处理器
c++ 和c 一样,都有个预处理器,他们的指令以# (pound)开头,在编译之前,预处理器会进行文本替换,比如#include,则预处理器会把iostream的文件内容添加到代码的这个位置来,然后和自己编写的源代码一起进入编译器。
c的头文件都是后缀.h的, c++的头文件没有扩展名
名称空间
这里说的简单,还不太懂,后面补充
总之如果头文件名不用后缀.h,那就必须用名称空间编译指令,去使得iostream中的定义对于程序可用;如果不用这个编译指令,那么cout 则必须写为std::cout, endl必须写为std::endl. 使用std名称空间的定义,使得定义可见,不必使用std::前缀
cout, cin
c++把输出看做是流出程序的字符流,cout用<< 把字符插入到输出流中;输入看作是流入程序的字符流,cin用>>从输入流抽取一个字符。
<< 和>>指示信息的流动方向
<< ,插入运算符,指出了信息流动路径,表示把字符串发送给cout,cout是一个预定义的对象。实际上<<也是按位左移运算符,这就是一个运算符重载的例子,一个运算符有不同的含义,编译器会通过代码上下文确定运算符的含义。C++ 允许让用户自己定义的类去重新定义一些运算符的含义
C里面的运算符重载:&是取址运算符,也是按位与; *是乘法,也是接触对指针的引用
c++的两种发送消息的方式
- 函数调用,使用类的方法
- 重新定义运算符,比如cin, cout. 还不是很明白
endl
c用’\n’换行,’\n’被视为一个字符,叫做换行符
编码整洁
声明语句
声明语句(defining declaration):让编译器给变量分配内存,说明信息存储位置和所需内存大小。int a; 就说明了需要分配多少内存,这段内存叫什么名字。编译器负责分配。C++所有变量必须声明,这样虽然麻烦一点,但是不会因为书写变量名称错误而创建一个新变量还不自知。
C一般在函数开始处放置所有的声明,但是c++ 通常把声明放在变量首次使用的地方,不限制必须放在一起,可以放在任何地方,有利有弊,放在一起便于看清楚函数用了多少变量,但是不放在一起的话查找起来比较方便
#include<iostream>
int main()
{
using namespace std;
int carrots = 30;
cout << "I have ";
cout << carrots;
cout << " carrots." << endl; // 拼接多条输出语句
carrots = carrots - 1;
cout << "Crunch, crunch. ";
cout << "I have ";
cout << carrots;
cout << " carrots now." << endl;
cout << endl;
cout << "\n";
cout << "good morning! \n";
int a, b, c;
a = b = c = 1; // c++ 可以连续赋值
int pens;
cout << "How many pens do you have? \n";
cin >> pens; // 信息从cin流向pens
cout << "Here are two more. \n";
// 拼接时放在多行,易读,推荐
cout << "Now you have "
<< pens + 2
<< " pens. \n";
return 0;
}
I have 30 carrots.
Crunch, crunch. I have 29 carrots now.
good morning!
How many pens do you have?
22
Here are two more.
Now you have 24 pens.
函数原型
函数原型就像函数声明,它之于函数就像是变量声明之于变量,就是为了说明涉及的类型,描述了接口信息。 c++ 程序必须为每一个函数提供原型,且放在main函数前面。
比如sqrt函数的原型,说明了返回值和参数的类型。注意函数原型必须分号结尾不然会被编译器当成函数头。
double sqrt(double);
像这种库函数的原型可以不用自己写到源代码,而是直接把对应的头文件包含进来,头文件里有原型。(注意函数的定义是在库文件里,而原型是在头文件里,分开的哈,c 和c++都是如此)
#include <cmath>
#include<iostream>
// 这两个都可以
//#include<cmath>
#include<math.h>
int main()
{
using namespace std;
double area;
cout << "enter the floor area of your house in square feet. \n";
cin >> area;
double side;
//double side = sqrt(area); // 初始化
cout << "That is the equivalent of a square " << sqrt(area) << " feet to the size. \n";
return 0;
}
enter the floor area of your house in square feet.
49.2
That is the equivalent of a square 7.01427 feet to the size.
其他原型示例
double pow(double, double);
int rand(void); // 关键字void显式说明不需要任何参数
int rand(); // 隐式说明不需要任何参数
void bucks(double); // 没有返回值,有的地方会把没有返回值的函数叫做过程,c++不care区分这些,大家都叫函数就完了
函数示例,子函数里面也需要写名称空间using编译指令,才能都访问std名称空间的cout. 如果程序所有函数都要访问名称空间std,那就把using指令写在main前面,和原型放在一起,但是一旦有一个函数不需要访问名称空间,我们就尽量不要直接写在外面让所有函数都访问,而是谁访问就在谁的函数体里面写。
main前面必须有simon的函数原型否则报错
除了main函数之外的函数的定义代码要放在main函数后面,但是所有的函数都是平等的
函数定义是绝对不可以嵌套的
#include<iostream>
//#include<cmath>
#include<math.h>
void simon(int);
int main()
{
using namespace std;
simon(4);
return 0;
}
void simon(int n)
{
using namespace std;
cout << "Simon says touch your toes " << n << " times! \n";
}
Simon says touch your toes 4 times!
#include<iostream>
double convert(double);
int main()
{
using namespace std;
double stone;
cout << "enter the weight in stone. \n";
cin >> stone;
double pounds;
pounds = convert(stone);
cout << "The weight is "
<< pounds
<< " in pounds. \n";
return 0;
}
double convert(double stone)
{
using namespace std;
return 14 * stone;
}
enter the weight in stone.
5.2
The weight is 72.8 in pounds.