C++中显式和隐式调用(直接返回结构体如何生成对象)

C++中生成对象有两种方法,显式的和隐式的。


显示生成对象

explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的。
其他不多说明了,这个用法不是太常用。下面的一个例子也有说明。

隐式生成对象

隐式生成对象,主要以标准迭代器为例来说明。 在本例中,主要是为自己定义的类实现一个迭代器。请与implicit区分开来。

class A
{
private:
AA *pAA;
public:
A(AA *pIn){pAA = pIn;}
typedef AIter<A> const_AIter;
}


template <typename T>
class AIter : public std::iterator<
    std::input_iterator_tag,     //  迭代器类型
    T, // 
    std::ptrdiff_t,             // 默认类型即可
    const T*,                   // 指针, pointer
    T                           // 引用, reference
                                    >
{
private:
    AA *p;
public:
    explicit AIter(AA *pp) : p(pp) {}
    iterator& operator++() // 实现 ++i
{
p = p->pNext; 
return *this;
}
    iterator operator++(int) // 实现i++
{
AIter retval = *this; 
++(*this); 
return retval;
}
    bool operator==(iterator other) const {return this->p == other.p;}
    bool operator!=(iterator other) const {return this->p != other.p;}
    reference operator*() const {return p;} // 隐式生成对象
// 因为这里面referencce 就是继承模版里面的,也就是T,
// 返回一个AA类型的指针也就意味着,返回之后隐式的构造一个对象
// 比如说本例中所说的: A(p)

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值