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;
}
输出:
说明:上述方法是错误的,并没有使对象成为实际对象,因为由于类 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 等的准备工作,请参阅完整的面试准备课程。