构造函数必须是public吗_c++ 构造函数,析构函数必须要给成公有的吗?

这是一道面试题,记得当时回答的并不好,因为我们对构造函数经常使用,例如单例模式下构造函数我们会声明为私有的,其他情况下构造函数我们都会声明为公有的,但是析构函数是否必须声明为公有的,还真没注意。下面我们就一起学习下。

(一)一个类的析构函数只能有一个,也不能重载

1.类的析构函数,是在对象的生命周期结束后,由系统自动调用的。

2.该函数不需任何参数,不需要传入任何参数,如果非要写一个带参数的析构函数,则会造成编译器的抱怨,造成二义性,这一点和够赞函数不同,构造函数可以根据传入的参数,选择合适的构造函数。构造函数可以显示调用,而析构函数系统负责调用,程序无法控制其调用时机。

(二)构造函数,析构函数必须是公有的吗?

1.析构函数必须给成公有的,因为对象生命周期结束后,系统会调用,如果不是公有的则会引发错误

2.构造函数可以是公有的,私有的,保护的

#include class Test{private:double num;Test(double d){num = d;}//~Test(){} 系统报错public:Test(int n){num = n;}~Test(){}};void Test:: InnerCreate(){    Test inner(3.14);//调用私有的构造函数}int main(){    Test  obj(0);//调用公有的构造函数    obj.InnerCreate();    return 0;}
a5cb115dd1f63659bc7771c878cd7387.png
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的坐标类的实现,包含私有数据员xy、公有员函数构造函数析构函数、显示坐标函数,以及用友元函数访问类中员计算两点间距离的实现: ```c++ #include <iostream> #include <cmath> class Coordinate { private: int x; int y; public: Coordinate(int x, int y) { this->x = x; this->y = y; } ~Coordinate() { std::cout << "Coordinate object destroyed" << std::endl; } void display() { std::cout << "x: " << x << ", y: " << y << std::endl; } friend double distance(const Coordinate& a, const Coordinate& b) { int dx = a.x - b.x; int dy = a.y - b.y; return std::sqrt(dx * dx + dy * dy); } }; ``` 在这个实现中,我们定义了一个名为Coordinate的类,其中包含了两个私有数据员x和y,它们表示一个二维坐标中的x坐标和y坐标。 我们还定义了一个构造函数,它接收两个整数参数来初始化x和y的值。析构函数用于在Coordinate对象被销毁时输出一条消息。 我们还定义了一个display函数,它用于显示当前坐标对象的x和y值。 最后,我们还定义了一个友元函数distance,它接收两个Coordinate对象作为参数,并计算它们之间的距离。在这个函数中,我们使用了sqrt函数来计算平方根。 使用这个坐标类,我们可以创建坐标对象,并调用它的display函数来显示它的x和y值。我们还可以使用distance函数来计算两个坐标对象之间的距离。例如: ```c++ int main() { Coordinate a(1, 2); Coordinate b(4, 6); a.display(); b.display(); std::cout << "Distance between a and b: " << distance(a, b) << std::endl; return 0; } ``` 这段代码将创建两个Coordinate对象a和b,并将它们的x和y值初始化为(1, 2)和(4, 6)。然后,它将调用这些对象的display函数来显示它们的x和y值,并使用distance函数来计算它们之间的距离。输出结果如下: ``` x: 1, y: 2 x: 4, y: 6 Distance between a and b: 5 Coordinate object destroyed Coordinate object destroyed ``` 这个例子中,我们创建了两个Coordinate对象,并在程序结束时销毁它们。在销毁对象时,我们还输出了一条消息,以便我们能够确认它们已经被正确销毁。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值