📜  C++中的变量

📅  最后修改于: 2021-05-30 05:21:00             🧑  作者: Mango

变量是赋予存储位置的名称。它是程序中存储的基本单位。

  • 可以在程序执行期间更改存储在变量中的值。
  • 变量只是给存储位置指定的名称,对变量执行的所有操作都会影响该存储位置。
  • 在C++中,必须在使用前声明所有变量。

如何声明变量?

典型的变量声明的形式为:

// Declaring a single variable
type variable_name;

// Declaring multiple variables:
type variable1_name, variable2_name, variable3_name;

变量名称可以由字母(大写和小写),数字和下划线’_’字符。但是,名称不能以数字开头。

在上图中,

例子

// Declaring float variable
float simpleInterest; 

// Declaring integer variable
int time, speed; 

// Declaring character variable
char var; 

变量声明和定义之间的区别

变量声明是指在首次使用变量之前首先声明或引入变量的部分。变量定义是为变量分配存储位置和值的部分。在大多数情况下,变量声明和定义是一起完成的。

请参阅以下C++程序以获得更好的说明:

#include 
using namespace std;
  
int main()
{
    // declaration and definition
    // of variable 'a123'
    char a123 = 'a';
  
    // This is also both declaration and definition
    // as 'b' is allocated memory and
    // assigned some garbage value.
    float b;
  
    // multiple declarations and definitions
    int _c, _d45, e;
  
    // Let us print a variable
    cout << a123 << endl;
  
    return 0;
}
输出:
a

变量类型

根据C++中变量的范围,存在三种类型的变量:

  • 局部变量
  • 实例变量
  • 静态变量


现在让我们详细了解这些变量中的每一个。

  1. 局部变量:在块,方法或构造函数中定义的变量称为局部变量。
    • 这些变量是在进入的块或从该块退出后调用并销毁该函数或从该函数返回调用时销毁的。
    • 这些变量的范围仅存在于声明该变量的块中。也就是说,我们只能在该块中访问这些变量。
    • 局部变量的初始化是强制性的。

    示例程序1:

    // C++ program to demonstrate Local variables
      
    #include 
    using namespace std;
      
    void StudentAge()
    {
        // local variable age
        int age = 0;
        age = age + 5;
        cout << "Student age is : " << age;
    }
      
    // Driver code
    int main()
    {
        StudentAge();
    }
    
    输出:
    Student age is : 5
    

    在以上程序中,变量age是函数StudentAge()的局部变量。如果我们在StudentAge()函数之外使用变量age,则编译器将产生错误,如下面的程序所示。

    示例程序2:

    // C++ program to demonstrate Local variables
      
    #include 
    using namespace std;
      
    void StudentAge()
    {
        // local variable age
        int age = 0;
        age = age + 5;
    }
      
    // Driver code
    int main()
    {
        StudentAge();
        cout << "Student age is : " << age;
    }
    
  2. 实例变量:实例变量是非静态变量,并且在任何方法,构造函数或块之外的类中声明。
    • 当实例变量在类中声明时,这些变量在创建类的对象时创建,而在对象被销毁时被销毁。
    • 与局部变量不同,我们可以对实例变量使用访问说明符。如果我们未指定任何访问说明符,则将使用默认的访问说明符。
    • 实例变量的初始化不是强制性的。
    • 实例变量只能通过创建对象来访问。

    示例程序

    // C++ program to demonstrate Local variables
      
    #include 
    using namespace std;
      
    class Marks {
      
    public:
        // This is a class variable
        static int studentNumber;
      
        // These variables are instance variables.
        // These variables are in a class
        // and are not inside any function
        int engMarks;
        int mathsMarks;
        int phyMarks;
      
    public:
        Marks()
        {
      
            // Modify the class variable
            ++studentNumber;
        };
    };
      
    // Setting the class variable of Marks
    int Marks::studentNumber = 0;
      
    // Driver code
    int main()
    {
      
        // first object
        Marks obj1;
        obj1.engMarks = 50;
        obj1.mathsMarks = 80;
        obj1.phyMarks = 90;
      
        // second object
        Marks obj2;
        obj2.engMarks = 80;
        obj2.mathsMarks = 60;
        obj2.phyMarks = 85;
      
        // displaying marks for first object
        cout << "Marks for first object:\n";
        cout << Marks::studentNumber << endl;
        cout << obj1.engMarks << endl;
        cout << obj1.mathsMarks << endl;
        cout << obj1.phyMarks << endl;
      
        // displaying marks for second object
        cout << "Marks for second object:\n";
        cout << Marks::studentNumber << endl;
        cout << obj2.engMarks << endl;
        cout << obj2.mathsMarks << endl;
        cout << obj2.phyMarks << endl;
    }
    
    输出:
    Marks for first object:
    2
    50
    80
    90
    Marks for second object:
    2
    80
    60
    85
    

    正如您在上面的程序中看到的那样,变量engMarksmathsMarksphyMarks是实例变量。如果上面的程序中有多个对象,则每个对象将拥有自己的实例变量副本。从上面的输出中可以清楚地看到,每个对象都有自己的实例变量副本。

  3. 静态变量:静态变量也称为类变量。
    • 这些变量的声明与实例变量的声明类似,不同之处在于,在任何方法构造函数或块之外的类中,使用static关键字声明静态变量。
    • 与实例变量不同,无论我们创建多少个对象,每个类只能有一个静态变量的副本。
    • 静态变量在程序执行开始时创建,并在执行结束时自动销毁。
    • 静态变量的初始化不是强制性的。默认值为0
    • 如果我们通过对象访问诸如实例变量之类的静态变量,则编译器将显示警告消息,并且不会停止程序。编译器会自动将对象名称替换为类名称。
    • 如果我们访问不带类名的静态变量,则编译器将自动附加类名。

    要访问静态变量,我们不需要创建该类的对象,我们只需将变量访问为

    class_name::variable_name;

    示例程序

    // C++ program to demonstrate Static variables
      
    #include 
    using namespace std;
      
    class Marks {
      
    public:
        // This is a class variable
        static int studentNumber;
      
        // These variables are instance variables.
        // These variables are in a class
        // and are not inside any function
        int engMarks;
        int mathsMarks;
        int phyMarks;
      
        Marks()
        {
      
            // Modify the class variable
            ++studentNumber;
        };
    };
      
    // Setting the class variable of Marks
    int Marks::studentNumber = 0;
      
    // Driver code
    int main()
    {
      
        // object of Marks
        Marks obj1;
        obj1.engMarks = 50;
        obj1.mathsMarks = 80;
        obj1.phyMarks = 90;
      
        // displaying marks for first object
        cout << "Marks for object:\n";
      
        // Now to display the static variable,
        // it can be directly done
        // using the class name
        cout << Marks::studentNumber << endl;
      
        // But same is not the case
        // with instance variables
        cout << obj1.engMarks << endl;
        cout << obj1.mathsMarks << endl;
        cout << obj1.phyMarks << endl;
    }
    
    输出:
    Marks for object:
    1
    50
    80
    90
    

实例变量Vs静态变量

  • 每个对象都有自己的实例变量副本,而我们每个类只能有一个静态变量副本,无论我们创建了多少个对象。
  • 使用一个对象对实例变量进行的更改不会反映在其他对象中,因为每个对象都有自己的实例变量副本。如果是静态的,则更改将反映在其他对象中,因为静态变量是类的所有对象所共有的。
  • 我们可以通过对象引用访问实例变量并且可以使用类名直接访问静态变量
  • 静态变量和实例变量的语法:
    class Example
    {
        static int a; // static variable
        int b;        // instance variable
    }
    
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”