C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)
目录
一. 数据类型
C++ 中的数据类型
使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。
您可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。
一些基本类型可以使用一个或多个类型修饰符进行修饰:signed , unsigned ,short ,long
下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。
注意:不同系统会有所差异。
从上表可得知,变量的大小会根据编译器和所使用的电脑而有所不同。
下面实例会输出您电脑上各种数据类型的大小。
#include<iostream>
#include<string>
#include <limits>
using namespace std;
int main()
{
cout << "short: \t\t" << "所占字节数:" << sizeof(short);
cout << "\t最大值:" << (numeric_limits<short>::max)();
cout << "\t\t最小值:"<< (numeric_limits<short>::min)() <<endl;
}
typedef
enumeration枚举类型
例子
#include <iostream>
using namespace std;
enum time {first,second,third,forth,fifth};
int main()
{
enum time a=fifth;
if (a==fifth)
{
cout << a <<endl;
cout << "Succeed!";
}
return 0;
}
运行结果:
4
Succeed!
c++中变量类型
变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。
基于前一章讲解的基本类型,有以下几种基本的变量类型,将在下一章中进行讲解
注意
C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等,这将会在后续的章节中进行讲解。
变量只能定义一次,可以使用extern关键字在多个文件中声明多次
例子
#include <iostream>
using namespace std;
// 变量声明
extern int a, b; //在头文件被申明过
extern int c;
extern float f;
int main ()
{
// 变量定义
int a, b;
int c;
float f;
// 实际初始化
a = 10;
b = 20;
c = a + b;
cout << c << endl ;
f = 70.0/3.0;
cout << f << endl ;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
30
23.333
**同样的,在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行。**例如:
// 函数声明
int func();
int main()
{
// 函数调用
int i = func();
}
// 函数定义
int func()
{
return 0;
}
二.变量作用域
在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:
全局变量系统自动初始化,局部变量系统不会自动初始化
定义变量时,最好进行初始化
#include <iostream>
using namespace std;
// 全局变量声明
int g = 99;
// 函数声明
int func();
int main()
{
// 局部变量声明
int g = 10;
cout << g << endl;
int kk = func();
cout << kk << endl;
return 0;
}
// 函数定义
int func()
{
return g;
}
运行结果:
10
99
运行结果:
此时的全局变量为:20
被改变的全局变量为:30
此时的全局变量为:30
三.常量
const 限定符定以后是不可以改变的,所以在定义时赋初值,否则是错误的 ;除非这个变量是用extern修饰的外部变量
四.修饰符类型
explicit构造函数是用来防止隐式转换的。请看下面的代码:
class Test1
{
public:
Test1(int n)
{
num=n;
}//普通构造函数
private:
int num;
};
class Test2
{
public:
explicit Test2(int n)
{
num=n;
}//explicit(显式)构造函数
private:
int num;
};
int main()
{
Test1 t1=12;//隐式调用其构造函数,成功
Test2 t2=12;//编译错误,不能隐式调用其构造函数
Test2 t2(12);//显式调用成功
return 0;
}
Test1的构造函数带一个int型的参数,代码23行会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此代码24行会出现编译错误。
普通构造函数能够被隐式调用。而explicit构造函数只能被显式调用