1. 简单介绍c++
首先我觉得c语言都那么难学了,c++从字面意思来讲肯定更hard study。
有关c++的介绍网页上有好多,这里就简单介绍一下:
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
C几乎是C++的一个子集,所有C语言支持的语法在C++基本都支持并需要使用。C plus plus(C++),在C的基础上又有了很多新的特性。如虚函数,运算符重载,多重继承,模板,异常处理,命名空间等。
c++有63个关键字,由于太多就不一一列举了,稍后用到在详解。
内置类型:C++中这些基本的数据类型也称为内置类型,也就是语言内部已定义的基本类型。
自定义类型:自己用struct/class/enum/union等定义的就是自定义类型。
2. c++的命名空间
命名空间域解决全局命名冲突的问题.
定义:以关键字namespace开始,其后接命名空间的名字
namespace name1
{
int a = 0;
}
namespace name2
{
int a = 1;
}
name1::a = 3;
name2::a = 4;
注:
(1)命名空间可以嵌套。
(2)命名空间的名字在其所在作用域中是唯一的,可以在全局作用域或者其它作用域内部定义,但是不能在函数或者类的内部定义。
(3)命名空间作用域不能以分号结束。
(4)不同命名空间的成员可以具有相同的名字。
3. c++的输入输出:
cout是标准输出流对象,<< 是输出操作符;
cin是标准输入流对象,>>是输入操作符;
endl是换行操作符;
这里说一下c++的浮点数输出:
#include <iostream>
#include <windows.h>
#include "c++.h"
using namespace std;
int main()
{
int i = 10;
double d = 1.111111111;
cout << i << endl; //输出10
cout << d << endl; //输出1.11111(5位)
system("pause");
}
那么问题来了,如何全部输出?
答案是:http://c.biancheng.net/cpp/biancheng/view/2227.html(ps脑子小,记不住)
4. 函数重载
函数重载:在同一作用域内,函数名相同,参数列表不同(参数个数与类型),返回值可以相同可以不同。
#include <iostream>
#include <windows.h>
using namespace std;
void Func(int i)
{
cout << i << endl;
}
void Func(double d)
{
cout << d << endl;
}
int main()
{
Func(10);
Func(1.11);
system("pause");
}
int main()
{
cout<<Add(1,2)<<endl;//3
cout << Add1(2) << endl;//7
system("pause");
}
那下面这个函数是否为函数重载呢?
void Func(int i,double d)
{
cout << i<< endl;
cout << d << endl;
}
void Func(double d,int i)
{
cout << d << endl;
cout << i << endl;
}
当然是了,两个函数对应位置参数不同。
这里分享一个觉得不错的详解c++重载的博客
http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html
(面试题)为什么c++支持函数重载,c不支持呢?
解答:这与编译过程有关。c++有函数名修饰规则:函数名+参数类型,支持重载。解决了命名冲突问题。
若有三个文件:test.c main.c test.h生成可执行程序过程为:
- 预处理: 展开头文件/宏替换/条件编译/去注释 。 生成test.i /main.i
- 编译: 检查语法,生成汇编代码 。 生成test.s/main.s
- 汇编: 汇编代码转成机器码 。 生成 test.o/main.o
- 链接: 链接到一起生成可执行程序。 生成a.out
函数调用时通过符号表查询所需函数的地址进行调用,通过反汇编可以查看此过程。
可在linux中通过g++ 编译文件 ,指令objdump -S a.out 查看 c++编译后发现
void Func(int i) -> _ZFunci
void Func(double d)-> _ZFuncd // 函数名+参数列表
可以改变参数列表测试
5. 缺省函数
规则:只可缺省右边的,必须连续。
//半缺省函数
int Add(int a, int b = 5)
{
return a + b;
}
//全缺省函数
int Add1(int a = 1, int b = 5)
{
return a + b;
}
在这函数参数已给定的值相当于备胎。关于备胎就不用解释了吧!