C++ 动态初始化对象
在这个背景下,我们将讨论使用动态构造函数来初始化对象。
术语 “动态初始化对象” 指的是在运行时初始化对象,或在此时给它赋予初始值。可以通过利用 构造函数 并为其提供 参数 来实现。当一个类有许多构造函数,每个构造函数都有不同的输入集时,这是非常有用的。
动态构造函数
术语 “动态函数 Object() { [native code] }” 指的是在运行时用于分配内存的函数 Object() { [native code] } 。
new运算符用于在运行时分配内存,而 delete运算符 用于在运行时 释放 内存。
动态分配
方法
在下面的示例中,内存在堆上分配,并且变量的默认函数 Object() { [native code] } 使用new动态初始化。
这个函数被类 “jtp” 的对象调用,然后输出动态分配变量 ptr 的值。
使用new运算符进行动态对象初始化的软件如下所示:
#include <iostream>
using namespace std;
class jtp {
int* ptr;
public:
jtp()
{
ptr = new int;
*ptr = 10;
}
void display()
{
cout<< *ptr<<endl;
}
};
int main()
{
jtp obj1;
obj1.display();
return 0;
}
输出:
10
动态释放内存
方法
为了在下面的代码中动态释放内存,使用delete。使用赋值运算符来覆盖对象 obj1 中的内容,使用delete运算符来 释放 对象obj1。
利用delete运算符动态释放内存的代码如下所示。
#include <iostream>
using namespace std;
class jtp {
int* ptr;
public:
jtp()
{
ptr = new int;
*ptr = 10;
}
void display()
{
cout<< "Value: " << *ptr
<<endl;
}
};
int main()
{
jtp* obj1 = new jtp();
jtp* obj2 = new jtp();
obj2 = obj1;
obj1->display();
obj2->display();
delete obj1;
return 0;
}
输出:
Value: 10
Value: 10
以下是一个C++程序的示例,展示了如何动态初始化对象并计算银行存款:
#include <iostream>
using namespace std;
class bank {
int principal;
int years;
float interest;
float returnvalue;
public:
bank() {}
bank(int p, int y, float i)
{
principal = p;
years = y;
interest = i/100;
returnvalue = principal;
cout<< "\nDeposited amount (float):";
for (int i = 0; i < years; i++) {
returnvalue = returnvalue
* (1 + interest);
}
}
bank(int p, int y, int i)
{
principal = p;
years = y;
interest = float(i)/100;
returnvalue = principal;
cout<< "\nDeposited amount"
<< " (integer):";
for (int i = 0; i < years; i++) {
returnvalue = returnvalue
* (1 + interest);
}
}
void display(void)
{
cout<<returnvalue
<<endl;
}
};
int main()
{
int p = 300;
int y = 3;
int I = 6;
float i = 3.25;
bank b1(p, y, i);
b1.display();
bank b2(p, y, I);
b2.display();
return 0;
}
输出:
Deposited amount (float):330.211
Deposited amount (integer):357.305
示例:
在这个示例中,我们有一个 “学生” 类,它有两个私有数据成员。
1) rNo - 用于跟踪学号
2) 使用perc函数保存百分比。
#include <iostream>
using namespace std;
struct Student {
private:
int rNo;
float perc;
public:
Student(int r, float p)
{
rNo = r;
perc = p;
}
void read(void)
{
cout<< "Enter roll number: ";
cin>>rNo;
cout<< "Enter percentage: ";
cin>>perc;
}
void print(void)
{
cout<<endl;
cout<< "Roll number: " <<rNo<<endl;
cout<< "Percentage: " <<perc<< "%" <<endl;
}
};
int main()
{
cout<< "Enter roll number to initialize the object: ";
int roll_number;
cin>>roll_number;
cout<< "Enter percentage to initialize the object: ";
float percentage;
cin>> percentage;
struct Student std(roll_number, percentage);
cout<< "After initializing the object, the values are..." <<endl;
std.print();
std.read();
std.print();
return 0;
}
输出:
Enter roll number to initialize the object: 20
Enter percentage to initialize the object: 40
After initializing the object, the values are...
Roll number: 20
Percentage: 40%
Enter roll number: 30
Enter percentage: 50
Roll number: 30
Percentage: 50%