一.C++的特点
1>强类型
(C语言的类型检查弱)注重类型,严格检查类型匹配
例如: C: int *p1; C++: int *p1;
double *p2; double *p2;
p1=p2;//自动完成类型转换 p1=p2;//Error不可以进行直接赋值,
2>支持面向对象编程(oop):封装,继承,多态
3>泛型编程(GP):异常, 模板(函数模板,类模板),标准模板库
二.C++的数据类型定义与输出
1>
int a(5);
cout<<a;
double b(3.5);
cout<<b;
char *str("china");
cout<<str;
Wchar_t *str1(L"china");
Wcout<<str1;//宽字符,用于汉字
//注:cout泛型编程,可接受不同的类型
2>命名空间,解决重定义的问题,解决变量,类,函数的重定义问题。
3>头文件#include<iostream>与C头文件加以区别
三.命名空间
1>解决重定义
2>可以嵌套,进行迭代式开发。
3>可以不加空间名称直接引用。
4>可以定义别名,namespace r=run;
5>命名空间可以拓展,增加变量,类,函数,命名空间等,
6>用函数指针作为接口,提高兼容性。
7>命名空间中全部内容都是公有的是透明的,而结构体默认是公有的透明的,可以定义为私有。
8>作用域为从using namespace开始下面的代码直到结束,且必须在命名空间的后方,如果变量重名,会出现不明确错误,要加上作用域。命名空间在块语句内部,作用域为从块语句开始到结束。
9>C语言中出现重名,全局变量与局部变量重名,无法引用全局变量,C++可以通过域运算符引用全局变量。
#include"iostream"
#include<stdlib.h>
int add(int a, int b);
namespace myspace
{
int a(10);
int(*p)(int, int)=add;
}
int add(int a, int b)
{
return a + b;
}
namespace
{
int b(8);
}
namespace runrunrun
{
int c(6);
}
struct my
{
int e=8;
private:
int d=10;// 私有不能访问
};
namespace r = runrunrun;
int a(5);
void main()
{
int a(1);
std::cout << ::a;
std::cout << a<<std::endl;
std::cout << myspace::a << std::endl;
std::cout << b<<r::c << std::endl;
using namespace std;
cout << myspace::p(1, 2) << endl;
system("pause");
}
#include<stdio.h>
int a=5;
void main()
{
int a=3;
printf("%d",a);
}
C++:
#include<iostream>
int a=5;
void main()
{
int a=3;
std::cout<<::a;//引用全局变量
}
#include<iostream>
namespace space
{
template<class T> using ptr = T*;
}
int add(int a, int b)
{
return a + b;
}
typedef int(*ADD)(int a, int b);
using FUNC = int(*)(int a, int b);
void main()
{
//int (*p)(int, int) = add;
ADD p=add;
std::cout<<p(1, 2)<<std::endl;
FUNC func = add;
std::cout << func(1, 2) << std::endl;
space::ptr<int> pint = (new int(3));
std::cout << *pint<< std::endl;
std::cin.get();
}
C与C++头文件的区别是有没有命名空间。
四.auto变量作用
1>自动变量,根据右值,自动区别匹配数据类型,
(int double char)
num[10]={0};
for(auto data:num)
//自动取出num中的值
{
std::cout<<data;}
2>自动循环,循环一维数组常量
//num[i][j];
for(auto data:num)
{
std::cout<<data;//行地址
for(int i=0;i<j;i++)
{
std::cout<<*(data+i)<<std::endl;
}
}