📜  C++初始化问题

📅  最后修改于: 2022-05-13 01:55:24.265000             🧑  作者: Mango

C++初始化问题

在本文中,我们将讨论 C++ 中的初始化问题,类的数据成员默认具有私有作用域,因此不能直接在类外访问。因此,在创建对象时,不能直接初始化对象的成员,这种无法初始化数据成员的问题称为初始化问题

示例:在下面的示例中,创建了一个具有两个数据成员的类。这些数据成员没有明确定义的范围,因此默认情况下它们是私有的。以后不能使用类的对象初始化私有数据成员。在这里,如果数据成员是使用类的对象初始化的,那么它会显示错误。

C++
// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Class declaring the data members
class Student {
    int marks;
    int rollno;
};
 
// Driver Code
int main()
{
    Student s1;
 
    // Member variables marks and
    // rollno cannot be initialized
    // outiside the class directly
    s1.marks = 70;
    s1.rollno = 2;
 
    cout << "Student Roll No: ";
    cout << s1.rollno;
    cout << "Student Marks: ";
    cout << s1.marks;
 
    return 0;
}


C++
// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Class to declare the
// data members
class Student {
    int marks = 95;
    int rollno = 1234;
 
    // Wrong way
};
 
// Driver Code
int main()
{
    Student s1;
    cout << s1.rollno;
    cout << s1.marks;
 
    return 0;
}


C++
// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Class student with
// student details
class Student {
    int marks;
    int rollno;
 
    // Constructor of
    // the class
public:
    Student()
    {
        marks = 95;
        rollno = 1234;
        cout << "Student marks: " << marks << endl
            << "Student roll no: " << rollno;
    }
};
 
// Driver Code
int main()
{
    Student s1;
 
    // Printed Student Details
    return 0;
}



输出:



说明:现在从上面的代码可以看出,私有数据成员不能直接在类外初始化。

为了解决上面的初始化问题,使用了构造函数的概念。它们是一个特殊的成员函数,在创建该类的对象时会自动调用。此外,它们的名称与类名称相同。

构造函数应该用于初始化类的成员变量,因为成员变量不能在单个语句中声明或定义。因此,构造函数用于在创建对象时初始化类的数据成员。

下面是用于说明上述概念的 C++ 程序:

C++

// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Class to declare the
// data members
class Student {
    int marks = 95;
    int rollno = 1234;
 
    // Wrong way
};
 
// Driver Code
int main()
{
    Student s1;
    cout << s1.rollno;
    cout << s1.marks;
 
    return 0;
}


输出:

初始化#2

说明:上述方法是错误的,并没有使对象成为实际对象,因为由于类 Student 的私有上下文,存储的值是垃圾。对象只是物理出现。为了使对象表现得像一个可以存储值的实际对象,构造函数开始发挥作用。

示例:在下面的示例中,在类中创建了一个构造函数,该构造函数将使用该值初始化变量。

C++

// C++ program to demonstrate the
// above approach
#include 
using namespace std;
 
// Class student with
// student details
class Student {
    int marks;
    int rollno;
 
    // Constructor of
    // the class
public:
    Student()
    {
        marks = 95;
        rollno = 1234;
        cout << "Student marks: " << marks << endl
            << "Student roll no: " << rollno;
    }
};
 
// Driver Code
int main()
{
    Student s1;
 
    // Printed Student Details
    return 0;
}
输出
Student marks: 95
Student roll no: 1234
想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程