求助:C++ 类的定义、声明问题

时间:2022-08-30 00:18:09
在使用boost库的date_time时,遇到点问题,请看下面这段代码:



date d(2002,Jan,1);
ptime t(d,minutes(5));
ptime t2 = t + hours(1) + minutes(2);



最后一句中的hours和minutes,这两个好像都是类,而不是普通的函数。
在这里用普通函数的调用方法去调用一个类的构造函数?在C++里可以直接这样调用吗?
这里的意思是不是 不用声明一个hours对象,直接这调用构造函数,就自动生成了一个对象呢?

俺是从C转过来的,很多C++的用法不太习惯,各位大大帮忙解释一下吧,谢谢啊

7 个解决方案

#1


这里 应该是对象的相加吧,类估计是hour和minute

#2


谢谢楼上,类确实是 hours 和 minutes,下面是他们的定义

  class hours : public time_duration
  {
  public:
    explicit hours(long h) :
      time_duration(h,0,0)
    {}
  };


  class minutes : public time_duration
  {
  public:
    explicit minutes(long m) :
      time_duration(0,m,0)
    {}
  };

#3


没错,直接调用构造函数就可以生成一个“匿名”的对象。比如说:
string s = "abc" + "def";
这样是不能编译的,但稍微一改就行了:
string s = string("abc") + "def";

#4


谢谢楼上兄弟,那俺又多了一个担心,如果大量用这种匿名对象,会不会造成后来在内存中存在大量的这咱死对象呢?

也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?

#5


引用 4 楼 silwoods 的回复:
谢谢楼上兄弟,那俺又多了一个担心,如果大量用这种匿名对象,会不会造成后来在内存中存在大量的这咱死对象呢?

 也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?


当超出匿名对象的作用域的时候,自动调用该对象的析构函数啊

#6


会的,匿名对象的生存周期是包含它的最大的表达式结束时。除非它被一个常量引用所绑定(这时将进一步延长到引用的作用域结束时),但迟早还是会析构的。

#7


谢谢各位兄弟,整明白了,:P

#1


这里 应该是对象的相加吧,类估计是hour和minute

#2


谢谢楼上,类确实是 hours 和 minutes,下面是他们的定义

  class hours : public time_duration
  {
  public:
    explicit hours(long h) :
      time_duration(h,0,0)
    {}
  };


  class minutes : public time_duration
  {
  public:
    explicit minutes(long m) :
      time_duration(0,m,0)
    {}
  };

#3


没错,直接调用构造函数就可以生成一个“匿名”的对象。比如说:
string s = "abc" + "def";
这样是不能编译的,但稍微一改就行了:
string s = string("abc") + "def";

#4


谢谢楼上兄弟,那俺又多了一个担心,如果大量用这种匿名对象,会不会造成后来在内存中存在大量的这咱死对象呢?

也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?

#5


引用 4 楼 silwoods 的回复:
谢谢楼上兄弟,那俺又多了一个担心,如果大量用这种匿名对象,会不会造成后来在内存中存在大量的这咱死对象呢?

 也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?


当超出匿名对象的作用域的时候,自动调用该对象的析构函数啊

#6


会的,匿名对象的生存周期是包含它的最大的表达式结束时。除非它被一个常量引用所绑定(这时将进一步延长到引用的作用域结束时),但迟早还是会析构的。

#7


谢谢各位兄弟,整明白了,:P