在学习了C语言的基础上,C++到底和C有什么区别呢?
#include // 使用名为std的命名空间
using namespace std;int main()
{// printf ("hello world\n");// cout 标准输出 往屏幕打印内容 相当于C语言的 printf// << 左移操作符,在这里它的功能被改造,代表数据流向// << 代表数据从右端移到左端 右端是 "hello world"字符串,左端是 cout 标准输出// 所以 cout << "hello world" 代表将内容打印到标准输出// endl 代表换行,相当于 C语言的 '\n'// << 操作符可以连着使用cout << "Hello World!" << endl;return 0;
}
运行结果:
namespace 是C++中的关键字,用来定义一个命名空间,语法格式为:
namespace name {变量函数类
}
name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define 等,最后由{ }包围
例如:
定义一个命名空间,名字叫NameSpaceA
namespace NameSpaceA
{int a = 0;
}
命名空间的定义可以嵌套,例如:
namespace NameSpaceB
{int a = 1;namespace NameSpaceC{struct Teacher{char name[10];int age;};}
}
NameSpaceA::a = 10; // 使用命名空间 NameSpaceA中的变量a
NameSpaceB::a = 20; // 使用命名空间 NameSpaceB中的变量aprintf ("%d, %d\n", NameSpaceA::a, NameSpaceB::a);
使用命名空间B中的命名空间C中的结构体 Teacher
NameSpaceB::NameSpaceC::Teacher t2 = {"xiaoming", 20};
using NameSpaceA::a;
a = 20; // 使用命名空间NameSpaceA中的a
NameSpaceB::a = 30; // 使用命名空间NameSpaceB中的a
using 声明不仅可以针对命名空间中的变量或者函数,还可以对整个命名空间进行声明,这样的方式声明命名空间以后,在后面使用未指定具体命名空间的变量或者函数产生命名冲突的时候,默认使用 NameSpaceB中的变量和函数。
using namespace NameSpaceB;
a = 10;printf ("%d\n", NameSpaceB::a);
示例代码:
#include namespace A
{int a = 1;void print(){std::cout << "this is namespace A" << std::endl; //::作用域限定符}
}namespace B
{int a = 2;void print(){std::cout << "this is namespace B" << std::endl;}
}int main()
{//std::cout << a << std::endl; //a不是全局变量也不是main函数局部变量 所以未定义std::cout << A::a << std::endl;using namespace B;std::cout << a << std::endl;print();A::print();//using namespace A;// 这里如果不注释掉,编译不通过print();return 0;
}
#include int main()
{register int i = 0; //声明寄存器变量 不能取地址for (i = 0; i < 1000; i++);&i; //C++ 对寄存器变量取地址 register 关键字变得无效return 0;
}
#include // 在C语言中重复定义多个全局变量是合法的
// 这些同名的全局变量最终都会被链接全局数据区的同一个地址空间上
int g_a;
int g_a = 1;int main()
{printf ("%d\n", g_a);printf ("%p\n", &g_a);return 0;
}
#include struct Student
{char name[20];int age;
};int main()
{// C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型// 所以在定义变量的时候需要在前面加上 struct 关键字进行修饰// C++中 struct 定义了一种新的数据类型,可以直接用来定义变量Student stu1 = {"xiaoming", 10};return 0;
}
#include
// 1 函数可以没有返回参数类型
f()
{printf ("hello world\n");
}// 2 函数参数可以没有数据类型
g(i)
{return i;
}int main()
{// 3 没有参数的函数可以接收任意个参数f(1,2,3,4,5);g(12,15);return 0;
}
在C语言中
int f( );表示返回值为int,接受任意参数的函数
int f(void);表示返回值为int的无参函数
在C++中
int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数
C++更加强调类型,任意的程序元素都必须显示指明类型
#include using namespace std;int main()
{bool a = true;bool b = false;a = 100;cout << a << endl;// 输出1cout << b << endl;// 输出0return 0;
}
C语言返回变量的值 C++语言是返回变量本身
(1)C语言中的三目运算符返回的是变量值,不能作为左值使用
(2)C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方
注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
(a < b ? 1 : b )= 30;
C语言如何支持类似C++的特性呢?
==>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已
#include // C语言中表达式的结果 放在什么地方? ==> 寄存器
// 1
// 表达式返回的是一个值,是一个数
// 在C++中,表达式返回的是变量本身// 2 如何做到的
// 让表达式返回一个内存空间..内存的首地址 指针
// 在C语言中如何实现C++的效果// 3 本质
// C++编译器自己做了取地址的操作
int main()
{int a = 10;int b = 20;// C++中三目运算符返回的是变量本身,所以可以作为左值使用// 这里C语言会报错(20 = 10),c++可以(b = 100)(a > b ? a : b) = 90; // 在C语言中让三目运算符可以当左值使用,可以通过返回变量地址实现*(a > b ? &a : &b) = 90;printf ("%d, %d\n", a, b);return 0;
}
上一篇:类与对象整理(下)