zoukankan      html  css  js  c++  java
  • explicit构造函数和非explicit构造函数

    代码
     1 #include <iostream>
     2 using namespace std;
     3 
     4 class Base{
     5 public:
     6     explicit Base(int i=0):ival(i)
     7     {
     8         cout << "Class Base's constructure is called" << endl;
     9     }
    10     Base(const Base& b)
    11     {
    12         cout << "Class Base's copy constructure is called" << endl;
    13     }
    14 private:
    15     int ival;
    16 };
    17 
    18 class Base1{
    19 public:
    20     Base1(int ival): mybase(ival)
    21     {
    22         cout << "Base1's constructure is called" << endl;
    23     }
    24 private:
    25     Base mybase;
    26 };
    27 
    28 void fun(Base b)
    29 {
    30     cout << "fun is OK" << endl;
    31 }
    32 
    33 void main()
    34 {
    35     int val = 5;
    36     Base1 base1(val);
    37     cout << endl;
    38     fun(Base(val));
    39 
    40     int ival;
    41     cin >> ival;
    42 }

    Base1的构造函数的成员初始化列表中,调用的是explicit的构造函数,注意不是copy构造函数。

    如果Base的构造函数不声明为explicit,若想以int类型实参调用fun函数,则fun的形参必须为Base对象,为Base&则错误。

    如果Base的构造函数为explicit,不可用int形参调用fun(Base b)。 

  • 相关阅读:
    热修复之类加载机制总结
    socket之tcp如何维护长连接
    sqlite之多线程处理
    android主线程ActivityThread-转载
    线程之ThreadLocal使用
    图片之压缩总结
    线程之交替执行的实例
    git的最常用命令总结
    sqlite之常见的语句
    activity之分析-3分钟看懂Activity启动流程
  • 原文地址:https://www.cnblogs.com/younes/p/1704796.html
Copyright © 2011-2022 走看看