类、对象、方法、即时变量
概念简述
对象 – 对象具有状态和行为。例如:一只狗的状态:颜色、名称、品种,行为:摇动、叫唤、吃。对象是类的实例。
类 – 类可以定义为描述对象行为/状态的模板/蓝图。比如人类是一个抽象的概念,小明是一个具体的人类。
方法 – 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。方法就是可以做什么。状态就是它是什么。
即时变量 – 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
Hello World 示例
简单输出代码
让我们看一段简单的代码,可以输出单词 Hello World。
#include <iostream>
using namespace std;
// main() 是程序开始执行的地方
int main()
{
cout << "Hello World"; // 输出 Hello World
return 0;
}Code language: PHP (php)
#include "stdafx.h"
#include <iostream>
using namespace std;
// main() 是程序开始执行的地方
int main()
{
cout << "Hello World"; // 输出 Hello World
int a;
cin >> a;
return 0;
}Code language: PHP (php)
程序解析
接下来我们讲解一下上面这段程序:
C++ 语言定义了一些头文件,这些头文件包含了程序中必需的或有用的信息。上面这段程序中,包含了头文件 #include <iostream>。
下一行 using namespace std; 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
下一行 // main() 是程序开始执行的地方 是一个单行注释。单行注释以 // 开头,在行末结束。
下一行 int main() 是主函数,程序从这里开始执行。
下一行 cout << "Hello World"; 会在屏幕上显示消息 “Hello World”。
下一行 return 0; 终止 main() 函数,并向调用进程返回值 0。0 表示没有出错,正常,目的是告诉操作系统。
分号与语句块
分号
在 C++ 中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。
例如,下面是三个不同的语句:
x = y;
y = y+1;
add(x, y);
语句块
语句块是一组使用大括号括起来的按逻辑连接的语句。例如:
{
cout << "Hello World"; // 输出 Hello World
return 0;
}Code language: JavaScript (javascript)
C++ 不以行末作为结束符的标识,因此,您可以在一行上放置多个语句。例如:
x = y;
y = y+1;
add(x, y);
等同于
x = y; y = y+1; add(x, y);
C++ 标识符
其实就是起名字,给变量、函数、类等起名字。
C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。
一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C++ 标识符内不允许出现标点字符,比如 @、& 和 %。
C++ 是区分大小写的编程语言。因此,在 C++ 中,Manpower 和 manpower 是两个不同的标识符。
下面列出几个有效的标识符:
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
但是也有一些是不符合标识符的:
1abc db%d
C++ 关键字
下表列出了 C++ 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。
C++ 中的空格
只包含空格的行,被称为空白行,可能带有注释,C++ 编译器会完全忽略它。
在 C++ 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。
因此,在下面的语句中:
int age;
在这里,int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们。
另一方面,在下面的语句中:
fruit = apples + oranges; // 获取水果的总数Code language: JavaScript (javascript)
fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。
例如:
#include <iostream>
using namespace std;
// main() 是程序开始执行的地方
int main()
{
int fruit = 0, apples = 12, oranges = 58;
fruit = apples + oranges; // 获取水果的总数
return 0;
}Code language: PHP (php)
程序的注释
程序的注释是解释性语句,您可以在 C++ 代码中包含注释,这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。
注释不属于源码一部分,不会编译到机器码里面,注释只是为了方便程序员查阅。就好比我们读书时候在文章旁边的读书笔记。
C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。
C++ 注释以 /* 开始,以 */ 终止。例如:
/* 这是注释 */
/* C++ 注释也可以
* 跨行
*/Code language: JSON / JSON with Comments (json)
注释也能以 // 开始,直到行末为止。例如:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World"; // 输出 Hello World
return 0;
}Code language: PHP (php)
当上面的代码被编译时,编译器会忽略 // 输出 Hello World,最后会产生以下结果。
在 /* 和 */ 注释内部,// 字符没有特殊的含义。在 // 注释内,/* 和 */ 字符也没有特殊的含义。因此,您可以在一种注释内嵌套另一种注释。例如:
但是如果在 /* 和 */ 内部使用了 */ 就可能有错误。
打孔机
CPU 只能进行简单的运算。CPU 也只能理解机器语言。101010 表示 +。
1+1:
000001 + 000001
000001 101010 000001 这一串表示 1+1。录入这一串东西给 CPU,CPU 就可以计算出 1+1。
C++ 数据类型
使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。也就是,当您创建一个变量时,就会在内存中保留一些空间。
您可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。
基本的内置类型
C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:
一些基本类型可以使用一个或多个类型修饰符进行修饰:
- signed
- unsigned
- short
- long
从上表可得知,变量的大小会根据编译器和所使用的电脑而有所不同。下面实例会输出您电脑上各种数据类型的大小。
#include<iostream>
#include <limits>
using namespace std;
int main()
{
cout << "type: \t\t" << "************size**************"<< endl;
cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
cout << "\t最大值:" << (numeric_limits<bool>::max)();
cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;
cout << "char: \t\t" << "所占字节数:" << sizeof(char);
cout << "\t最大值:" << (numeric_limits<char>::max)();
cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;
cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);
cout << "\t最大值:" << (numeric_limits<signed char>::max)();
cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;
cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);
cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();
cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;
cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);
cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();
cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;
cout << "short: \t\t" << "所占字节数:" << sizeof(short);
cout << "\t最大值:" << (numeric_limits<short>::max)();
cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;
cout << "int: \t\t" << "所占字节数:" << sizeof(int);
cout << "\t最大值:" << (numeric_limits<int>::max)();
cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;
cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);
cout << "\t最大值:" << (numeric_limits<unsigned>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;
cout << "long: \t\t" << "所占字节数:" << sizeof(long);
cout << "\t最大值:" << (numeric_limits<long>::max)();
cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;
cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);
cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;
cout << "double: \t" << "所占字节数:" << sizeof(double);
cout << "\t最大值:" << (numeric_limits<double>::max)();
cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;
cout << "long double: \t" << "所占字节数:" << sizeof(long double);
cout << "\t最大值:" << (numeric_limits<long double>::max)();
cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;
cout << "float: \t\t" << "所占字节数:" << sizeof(float);
cout << "\t最大值:" << (numeric_limits<float>::max)();
cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;
cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);
cout << "\t最大值:" << (numeric_limits<size_t>::max)();
cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;
cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;
cout << "type: \t\t" << "************size**************"<< endl;
return 0;
}Code language: PHP (php)
typedef 声明
您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
typedef type newname;
例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:
typedef int feet;
现在,下面的声明是完全合法的,它创建了一个整型变量 distance:
feet distance;
int main()
{
int age = 100;
typedef int feet;
feet age2 = 120;
return 0;
}Code language: JavaScript (javascript)
枚举类型
我们这个 E 世界总是有一类东西是有固定值的。比如季节:春夏秋冬;性别:男女;月份:1-12月;成绩:不及格、及格、良好、优秀。
季节:春 0,夏 1,秋 2,冬 3
性别:男 4,女 9
现在的季节:夏
小明的性别:女
枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓”枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
也就是把一堆用到的值放在一起,我们以后使用这个类型就只能从这堆值里面获取。
比如:
性别:男、女
季节:春、夏、秋、冬
如果枚举没有初始化,即省掉”=整型常数”时,则从第一个标识符开始。
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 “blue”。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。
enum color { red, green=5, blue };
在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。
我们换一个在线编程的网站:http://www.bccn.net/run/
#include <iostream>
using namespace std;
int main()
{
enum session {
chun,
xia,
qiu,
dong
};
session s1 = chun;
session s2 = dong;
cout << s1 << endl;
cout << s2 << endl;
return 0;
}Code language: PHP (php)
可以看到默认 chun=0,xia=1,qiu=2,dong=3。如果我们让 xia=3:
枚举是会有重复的概念。
#include <iostream>
using namespace std;
int main()
{
enum session {
chun,//0
xia = 3,//1
qiu = 6,//2 4
dong = 0//3 5
};
session dqjj = xia;
session s1 = chun;
session s2 = dong;
cout << s1 << endl;
cout << s2 << endl;
return 0;
}Code language: PHP (php)
变量
变量其实只不过是程序可操作的存储区的名称。
C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
变量的名称:
- 可以由字母、数字和下划线字符组成。
- 它必须以字母或下划线开头。也就是不能已数字开头。
- 大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。
C++ 也允许自定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等。
变量定义
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:
type variable_list;
int age;
float price;
char c;
int grade;
int c,d,e;
在这里,type 必须是一个有效的 C++ 数据类型,可以是 char、wchar_t、int、float、double、bool 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。下面列出几个有效的声明:
int i, j, k;
char c, ch;
float f, salary;
double d;
例如:
#include <iostream>
using namespace std;
int main()
{
int age,salary,month;
float price;
return 0;
}Code language: PHP (php)
变量初始化
变量的初始化,定义的时候就给它一个初始值。变量可以在声明的时候被初始化(指定一个初始值)。初始化器由一个等号,后跟一个常量表达式组成,如下所示:
type variable_name = value;
#include <iostream>
using namespace std;
int main()
{
int d = 3, f = 5; // 定义并初始化 d 和 f
float z = 22.2; // 定义并初始化 z
char x = 'x'; // 变量 x 的值为 'x'
return 0;
}Code language: PHP (php)
变量声明
变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
当您使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用。您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。
说白了就是告诉编译器,我在这个文件中,有这个变量。
#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;
}Code language: PHP (php)
同样的,在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行。例如:
// 函数声明
int func();
int main()
{
// 函数调用
int i = func();
}
// 函数定义
int func()
{
return 0;
}Code language: JavaScript (javascript)
把函数放到上面就没有问题:
#include <iostream>
using namespace std;
// 变量声明
extern int a, b;
extern int c;
extern float f;
// 函数定义
int func()
{
return 0;
}
int main ()
{
// 变量定义
int a = func();
return 0;
}Code language: PHP (php)
作用域
一只蚂蚁它有它的一个领地,出了这个领地那么它就不在受保护,不能再发挥它的作用。
作用域是程序的一个区域,一般来说有三个地方可以定义变量:
- 在函数或一个代码块内部声明的变量,称为局部变量。
- 在函数参数的定义中声明的变量,称为形式参数。
- 在所有函数外部声明的变量,称为全局变量。
#include <iostream>
#include "stdafx.h"
using namespace std;
// 变量声明
int func();
void func2(int r);
int g = 90; //在函数外面定义的变量是全局变量
int main()
{
// 变量定义
int a = func();
func2(a);
return 0;
}
int func()
{
int c = 2;//局部变量 在函数内部定义的变量
return c;
}
void func2(int r) //形式参数
{
cout << r;
}Code language: PHP (php)
榨油机(花生)===》花生油;碾米机(稻米)===》大米。函数就是类似这些机器,它可以完成一些功能。它可以接受一些参数(原材料),最后有产出。
局部变量
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。下面的实例使用了局部变量:
#include <iostream>
using namespace std;
int main ()
{
// 局部变量声明
int a, b;
int c;
// 实际初始化
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}Code language: PHP (php)
局部变量就好比人家的私有财产,外面的人不能随便操作。比如你不能动人家家里的电风扇。
全局变量
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。就好比一些政府的公共资源,比如公园里面的木马,免费的,公共的,谁都可以去玩。
下面的实例使用了全局变量和局部变量:
#include <iostream>
using namespace std;
// 全局变量声明
int g;
int main ()
{
// 局部变量声明
int a, b;
// 实际初始化
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}Code language: PHP (php)
在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:
#include <iostream>
using namespace std;
// 全局变量声明
int g = 20;
int main ()
{
// 局部变量声明
int g = 10;
cout << g;
return 0;
}Code language: PHP (php)
#include <iostream>
using namespace std;
// 变量声明
int func();
void func2(int r);
int g = 90; //在函数外面定义的变量是全局变量
int main()
{
// 变量定义
int a = func();
func2(a);
//c = 12;
g = 123;
std::cout << g;
int inp;
cin >> inp;
return 0;
}
int func()
{
int c = 2;//局部变量 在函数内部定义的变量
return c;
}
void func2(int r) //形式参数
{
std::cout << r;
}Code language: PHP (php)
初始化局部变量和全局变量
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
对于局部变量,我们应该要养成初始化的习惯。如果不初始化可能会形成意想不到的事情。
#include <iostream>
using namespace std;
int g; //在函数外面定义的变量是全局变量
int main()
{
cout << g << endl;
int a;
cout << a << endl; // 报错 使用了未初始化的局部变量
int inp;
cin >> inp;
return 0;
}Code language: PHP (php)
#include <iostream>
using namespace std;
int g; //全局变量 可以不用初始化 系统会自动给默认值
int main()
{
cout << g << endl;
int a = 0;//对于局部变量 一定要先初始化 再使用 否则报错
cout << a << endl;
int inp;
cin >> inp;
return 0;
}Code language: PHP (php)