C++基础01-C++对c的增强

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所 有标识符都被定义于一个名为std的namespace中。

一 :<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上, 在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件 里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此,

1)当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;

2)当使用<iostream>的时候,该头文件没有定义全局命名空间,必须 使用namespace std;这样才能正确使用cout。

最方便的就是使用using namespace std; 例如: using namespace std;这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写: cout <<hex << 3.4 << endl;因为标准库非常的庞大,所以程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都被放在名字空间std中。但这又会带来了一个新问 题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。所以就有了<iostream.h> 和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"

namespace nA{}  不能定义在函数中 只能是全局变量 

//当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命
     //名空间,也就是早期的c++实现;
//当使用<iostream>的时候,该头文件没有定义全局命名空间,必须
    //使用namespace std;这样才能正确使用cout。

//C++定义变量随用随定义
//C中最好都定义在主函数开始位置

//C++对全部变量的检测增强(不可重复定义)
//C语言中ok

//C++中的struct是⼀个新类型的定义声明
//C语⾔的struct定义了⼀组变量的集合,C编译器并不认为这是⼀种新的类型
   //如若没有typedef必须用struct进行变量声明


//C++中所有的变量和函数都必须有类型
//C语⾔中的默认类型int在C++中是不合法的
//C++更加强调类型,任意的程序元素都必须显示指明类型

//C++在C语⾔的基本类型系统之上增加了bool
//C++中的bool可取的值只有true和false.理论上bool只占⽤⼀个字节
//true代表真值,编译器内部⽤1来表⽰ false代表⾮真值,编译器内部⽤0来表⽰
//bool类型只有true(⾮0)和false(0)两个值
//C++编译器会在赋值时将⾮0值转换为true,0值转换为false


//C语言中的三目运算符返回的是变量值,不能作为左值使用
//C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方,可以作为左值

(a > b ? a : b )= 50;  //正确,C++中的三目运算符可直接返回变量本身,可以作左值
//(a > b ? 10 : 20) = 50; 10和20是自变量,不能修改,没有内存地址

//C++中的const修饰的,是一个真正的常量,而不是C中变量(只读)。在
//const修饰的常量编译期间,就已经确定下来了
//C++中的const常量与宏定义不同
//const常量是由编译器处理的,提供类型检查和作用域检查
//宏定义由预处理器处理,单纯的文本替换


//c 语言中枚举本质就是整型, 枚举变量可以用任意整型赋值。而 c++中枚举
//变量, 只能用被枚举出来的元素初始化。

 c语言.c  文件:

#include<stdio.h>
#if 1
void test01() {int a = 10;printf("%d\n", a);int b = 20;
}
int g_val;  //分配到bss段
int g_val = 10;
void test02() {printf("%d\n", g_val);
}struct student1 {char name[64];int id;
};
typedef struct student2 {char name[64];int id;
};
typedef struct Student3 {char name[64];int id;
}student3;void test03() {struct student1 s1;//student2 s2;  错误student3 s3;
}f() {return 10;
}
void test04() {f();   //ok
}g(int a) {return a;
}
void test05() {  g(10,20,30);//ok
}void test07() {int a = 10;int b = 20;int c = 0;//左值 右值//左值//右值c = a > b ? a : b;printf("%d\n", c);//(a > b ? a : b )= 50;  错误  (a > b ? a : b)返回的是一个具体数值//10=50; 错误*(a > b ? &a : &b) = 50;  //(a > b ? &a : &b) 返回的是a的地址 *a间接操作a的地址printf("a=%d\n", a);printf("a=%p\n", a);}
void test08() {/*const int a;int const a;  //等价,都表示a是一个常量 只读 不可修改 栈区const int   *c;const int*   c;  //等价于(const int)*c;指针存放地址指向的内容不可以修改//指针指向可以修改int* const c;  //等价于int(* const c); 指针指向是int,指针本身是const//指针指向不可以改变,但是指针存放地址指向的内容可以改变const int* const c; //指针指向不可以改变,指针存放地址指向的内容不可以改变*/const int a = 10;  //a虽然用const修饰,但是变量//int array[a] = { 0 }; a是变量,所以报错int *p = &a;*p = 20;printf("%d", a);  //20}enum season {Spring,Summer,Autumn,Winter1,Winter2,Winter3,Winter4,
};
void test09() {enum season s = Winter3;if (s == 5) {printf("%d", s);  //5}s = Winter4;if (s == 64) {printf("%s", s);}
}
int main(void) {/*test01();test02();test03();test04();test05();test06();test07();test08();*/test09();return 0;
}
#endif

c++语言.cpp:

//当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命//名空间,也就是早期的c++实现;
//当使用<iostream>的时候,该头文件没有定义全局命名空间,必须//使用namespace std;这样才能正确使用cout。//C++定义变量随用随定义
//C中最好都定义在主函数开始位置//C++对全部变量的检测增强(不可重复定义)
//C语言中ok//C++中的struct是⼀个新类型的定义声明
//C语⾔的struct定义了⼀组变量的集合,C编译器并不认为这是⼀种新的类型//如若没有typedef必须用struct进行变量声明//C++中所有的变量和函数都必须有类型
//C语⾔中的默认类型int在C++中是不合法的
//C++更加强调类型,任意的程序元素都必须显示指明类型//C++在C语⾔的基本类型系统之上增加了bool
//C++中的bool可取的值只有true和false.理论上bool只占⽤⼀个字节
//true代表真值,编译器内部⽤1来表⽰ false代表⾮真值,编译器内部⽤0来表⽰
//bool类型只有true(⾮0)和false(0)两个值
//C++编译器会在赋值时将⾮0值转换为true,0值转换为false//C语言中的三目运算符返回的是变量值,不能作为左值使用
//C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方,可以作为左值//C++中的const修饰的,是一个真正的常量,而不是C中变量(只读)。在
//const修饰的常量编译期间,就已经确定下来了
//C++中的const常量与宏定义不同
//const常量是由编译器处理的,提供类型检查和作用域检查
//宏定义由预处理器处理,单纯的文本替换//c 语言中枚举本质就是整型, 枚举变量可以用任意整型赋值。而 c++中枚举
//变量, 只能用被枚举出来的元素初始化。
#if 1
#include<iostream>
using namespace std;
void test01() {int i = 0;for (int i = 0; i < 10; i++){}int b = 20;cout << b << endl;
}
/*  
int g_val;  
int g_val = 10;  重复定义ERROR
void test02()
{cout << g_val << endl;
}
*/struct student
{char name[64];int id;
};void test03() {student s1;
}/*
f() {  //没有返回类型 错误return 10;
}
void test04() {f();//没有返回类型 错误g(10,20);  //报错
}*//*
g(int a) {return a;
}
void test05() {g(10, 20);  //报错  缺少参数
}*/void test06() {bool flag = true;cout << flag << endl;  //1flag = false;cout << flag << endl;  //0flag = 3;cout << flag << endl;  //1flag = -3;cout << flag << endl;  //1cout<<"sizeof(flag):" << sizeof(flag) << endl;
}void test07() {int a = 10;int b = 20;int c = 0;//左值 右值//左值//右值cout << "a=" << a << endl;  //10cout << "b=" << b << endl;  //20c = a > b ? a : b;cout << c << endl;  //20cout << "a=" << a << endl;  //10cout << "b=" << b << endl;  //20(a > b ? a : b )= 50;  //正确,C++中的三目运算符可直接返回变量本身,可以作左值cout <<"a="<< a << endl;    //10cout << "b="<<b << endl;    //50
}void test08() {const int a = 10;  //a是真正的常量int array[a] = { 0 };  //可以通过编译int *p = (int*)&a;  //如果对常量取地址,编译器会临时开辟一个空间temp,指针指向temp*p = 20;  //改变的时临时开辟的temp变量cout << "a=" << a << endl;    //10cout << "*p=" << *p << endl;  //20
}enum season {Spring,Summer,Autumn,Winter1,Winter2,Winter3,Winter4,
};
void test09() {enum season s = Spring;if(s==Spring)cout << s << endl;  //0
}
int main() {//test06();//test07();//test08();test09();
}#endif

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php环行队列实现,java数组实现队列及环形队列实现过程解析

这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下代码内容ArrayQueue---用数组实现队列package com.structure;import java.util.Scanner;/*** auther:…

C++混淆点-static关键字理解

.先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。&#xff08;static函数&#xff0c;static变量均可&#xff09; 当同时编译多个文件时&#xff0c;所有未加static前缀的全局变量和函数都具有全局可见性。 举例来说明。同时编译两个源文件&#xff0c;一个是a.c&…

php分页代码 页数太多,php分页函数示例代码分享

一例php分页函数代码。分享一例php分页函数代码&#xff0c;用此函数实现分页代码很不错。代码&#xff0c;php分页函数。/** 使用方法&#xff1a;require_once(mypage.php);$resultmysql_query("select * from mytable", $myconn);$totalmysql_num_rows($result); …

C++基础02-C++对c的拓展

变量名实质上是一段连续存储空间的别名&#xff0c;是一个标号(门牌号) 通过变量来申请并命名内存空间. 通过变量的名字可以使用存储空间. 变量名&#xff0c;本身是一段内存的引用&#xff0c;即别名(alias). 引用可以看作一个已定义变量的别名。 引用的语法&#xff…

matlab在电力系统故障的应用,MATLAB在电力系统故障分析中的应用

第5章MATLAB在电力系统故障分析中的仿真实例 5 1无穷大功率电源供电系统三相短路仿真5 2同步发电机突然短路的暂态过程仿真5 3小电流接地系统单相故障 5 1无穷大功率电源供电系统三相短路仿真 5 1 1无穷大功率电源供电系统三相短路的暂态过程5 1 2无穷大功率电源供电系统仿真模…

C++基础03-C++对c的拓展-函数

一、内联函数 c 语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用 的开销。但是由于宏函数的处理发生在预处理阶段,缺失了语法检测 和有可能带来的语 意差错。 特点&#xff1a; 1&#xff09;内联函数声明时inline关键字必须和函数定义结合在一起&a…

php小程序onload,微信小程序 loading 组件实例详解

这篇文章主要介绍了微信小程序 loading 组件实例详解的相关资料,需要的朋友可以参考下loading通常使用在请求网络数据时的一种方式&#xff0c;通过hidden属性设置显示与否主要属性&#xff1a;wxml显示loading正在加载jsPage({data:{// text:"这是一个页面"hiddenLo…

机器学习之实验过程02

机器学习之实验过程-数据清理 from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_errordata_path = /home/py/Work/机器学习/labs/data/Feedback.csv df = pd.read_csv(data_path) df.head() print (df.tail()) rename_pai…

C++基础04-类基础

一、类和对象 面向对象三大特点&#xff1a;封装、继承、多态。 struct 中所有行为和属性都是 public 的(默认)。C中的 class 可以指定行为和属性的访问方式。 封装,可以达到,对内开放数据,对外屏蔽数据,对外提供接口。达到了信息隐蔽的功能。 class 封装的本质,在于将数…

matlab 矩阵位移法编程 结构力学,matlab 矩阵位移法编程 结构力学

矩阵位移法编程大作业(091210211)一、编制原理本程序的原理是基于结构力学矩阵位移法原理&#xff0c;以结构结点位移作基本未知量&#xff0c;将要分析的结构拆成已知节点力—结点力位移关系的单跨梁集合&#xff0c;通过强令结构发生待定的基本未知位移&#xff0c;在各个单跨…

C++混淆点-构造函数参数

#include<iostream> using namespace std;class Test { public://Test(int x, int y) { //或者将形参名不要等于数据成员名// //x x; //自赋值 错误// //y y;// this->x x; //正确 形参a屏蔽了成员变量a&#xff0c;所以必须用this指针索引&#xff0c;这样程序直…

php 静态页面模板类,dedetag.class.php 静态模板类

类文件include/dedetag.class.php这个文件是dedecms V5.3及之前版本使用的主要的模板类&#xff0c;它是解析式模板类&#xff0c;并非编译式的(区别是前者通过获得标签位置进行内容替换&#xff0c;后者是直接解析式PHP代码&#xff0c;二次执行)一、模板语法织梦模板引擎是一…

C/C++混淆点-字符串指针

c语言中没有字符串的类型&#xff0c; 所以对字符串操作&#xff0c;有两种形式:可以用字符指针&#xff0c;或者字符串数组&#xff08;这里的指针变量c, 系统会为其重新分配内存) &#xff08;1&#xff09;用字符数组存放一个字符串 char string[]"Linux C"; pri…

python 文件上传下载,python实现上传下载文件功能

最近刚学python,遇到上传下载文件功能需求&#xff0c;记录下&#xff01;django web项目&#xff0c;前端上传控件用的是uploadify。文件上传 - 后台view 的 Python代码如下&#xff1a;csrf_exemptrequire_http_methods(["POST"])def uploadFiles(request):try:use…

C++基础05-类构造函数与析构函数

总结&#xff1a; 1、类对象的作用域为两个{}之间。在遇到}后开始执行析构函数 2、当没有任何显式的构造函数&#xff08;无参&#xff0c;有参&#xff0c;拷贝构造&#xff09;时&#xff0c;默认构造函数才会发挥作用 一旦提供显式的构造函数&#xff0c;默认构造函数不复…

PHP网站配置项,Thinkphp5通用网站后台配置项的动态添加及更新

一、引入无论平时我们自己制作&#xff0c;还是浏览别人的网站&#xff0c;它都具有其相应的一些共用的、通用的属性&#xff0c;比如&#xff1a;网站的名字&#xff0c;关键字、备案号、分页数量、是否开启缓存等信息。一些网站可能将配置项写死在后台&#xff0c;无法动态更…

C++基础06-类与对象之new和malloc

1、C和C动态分配内存区别&#xff1a; 在C语言中是利用库函数malloc和free来分配和撤销内存空间的。 C提供了较简便而功能较强的运算符new和delete来取代 malloc和free函数。 new和delete是运算符&#xff0c;不是函数&#xff0c;因此执行效率高。 2、new和delete的用法 &l…

php获取数组中的全部可以吗,php获取数组中所有值的方法

php的数组操作函数array_values 可以提取一个数组中所有元素值&#xff0c;具体的使用方法&#xff0c;可以参考下面的教程。array_values() 函数的作用是返回数组中所有元素的值&#xff0c;使用起来非常简单&#xff0c;只有一个必选参数&#xff0c;就可以返回一个包含给定数…

C++基础07-类之静态成员变量和成员函数

总结&#xff1a; 1、静态数据成员和静态成员函数属于整个类而不是某个对象 即使没有定义对象&#xff0c;静态成员也是存在的 2、static 成员类外存储,求类大小,并不包含在内。 &#xff08;因为存储在全局区&#xff0c;而类一般存储在栈区&#xff09; 3、静态数据成员在…

oracle 查询cpu 100%,Oracle 11g中查询CPU占有率高的SQL

oracle版本&#xff1a;oracle11g背景&#xff1a;今天在Linux中的oracle服务上&#xff0c;运用top命令发现许多进程的CPU占有率是100%。操作步骤&#xff1a;以进程PID:7851为例执行以下语句&#xff1a;方法一&#xff1a;(1)通过PID&#xff0c;查得相对应的系统进程对应的…