Kir*_*C K 3 c++ constructor destructor dynamic-memory-allocation c++11
我是C++的学习者.我编写了以下程序.我正在研究构造函数和析构函数的概念.我在下面有这个代码,我声明了一个私有析构函数,并使用main()中类的成员函数访问私有成员.我知道私有构造函数可以声明但是公共构造函数也是强制性的吗?这是我的代码如下:
class Book
{
private:
int *pages;
int *price;
Book() //default constructor
{
pages = new int;
price = new int;
*pages = 300;
*price = 8;
}
public:
void pre_destructor()
{
std::cout << "The pages:" << *pages << "\n";
std::cout << "The price:" << *price << "\n";
}
~Book() //destructor
{
std::cout << "The pages:" << *pages << "\n";
std::cout << "The price:" << *price << "\n";
delete pages;
delete price;
}
};
int main()
{
using namespace std;
Book book1;
cout << "Before using destructors" << endl;
cout << "---------------------------------"<< endl;
book1.pre_destructor();
cout << "After using destructors" << endl;
cout << "---------------------------------";
return 1;
}
Run Code Online (Sandbox Code Playgroud)
对于上述程序,显示了两个错误.一个是在声明对象的main函数中; 错误:内容中的错误.第二个是在调用构造函数的行中; 错误:Book :: Book()是私有的.
主要不是直接访问代码中的构造函数.那为什么会显示访问错误?
不,public构造函数不是强制性的.私有构造函数有用例.
private(或删除)构造函数以防止创建实例.private构造函数来强制执行其单例状态.该实例可以通过staticgetter 访问.friend,因此能够调用private构造函数.这种方案在Java中比C++更常见,但C++也允许它.也就是说,您只想构建一个类的实例:
Book book1;
Run Code Online (Sandbox Code Playgroud)
这种用法肯定需要一个public默认的构造函数.
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |