成员初始化表的作用 实例解析
来源:互联网 发布:mac make alias 编辑:程序博客网 时间:2024/06/03 19:31
在类的初始化过程中,成员初始化表是一种更高效的方式,从下面例子可以看出以下两种初始化方法的效率区别
第一种:
BigClass(const MemClass& a):_a(a){}
第二种:
BigClass(const MemClass& a)
{
_a = a;
}
对于第一种 成员类不调用默认构造函数,直接调用复制构造函数
对于第二种 成员类首先调用默认构造函数,然后调用=操作符重载 来完成复制
其区别类似于
MemClass a(MemClass(b));
和
MemClass a;
MemClass b;
a = b;
以下是完整代码
#include <iostream>
using namespace std;
class MemClass
{
private:
int num;
public:
MemClass()
{
cout<<"default Constructer of MemClass is called,Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
MemClass(int n)
{
cout<<"Constructer of MemClass is called ADDR:"<<this<<" size:"<<sizeof(*this)<<endl;
num = n;
}
MemClass(const MemClass &a)
{
cout<<"copy construct of MemClass is called Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
this->num = a.num;
}
MemClass& operator= (const MemClass& roe)
{
cout<<"operator= of MemClass is called Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
if (this == &roe) return *this;
this->num = roe.num;
return *this;
}
~MemClass()
{
cout<<"MemClass is destructed Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
};
class BigClass
{
private:
MemClass _a;
public:
BigClass()
{
cout<<"default Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
#ifdef CASE1
BigClass(const MemClass& a):_a(a)
{
cout<<"Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
#else
BigClass(const MemClass& a)
{
cout<<"Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
_a = a;
}
#endif
~BigClass(){cout<< "BigClass is destructed Addr:"<<this<<" size:"<<sizeof(*this)<<endl;}
};
int main()
{
BigClass big2(MemClass(1));
return 0;
}
以下是程序结果
在类的初始化过程中,成员初始化表是一种更高效的方式,从下面例子可以看出以下两种初始化方法的效率区别
第一种:
BigClass(const MemClass& a):_a(a){}
第二种:
BigClass(const MemClass& a)
{
_a = a;
}
对于第一种 成员类不调用默认构造函数,直接调用复制构造函数
对于第二种 成员类首先调用默认构造函数,然后调用=操作符重载 来完成复制
其区别类似于
MemClass a(MemClass(b));
和
MemClass a;
MemClass b;
a = b;
以下是完整代码
#include <iostream>
using namespace std;
class MemClass
{
private:
int num;
public:
MemClass()
{
cout<<"default Constructer of MemClass is called,Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
MemClass(int n)
{
cout<<"Constructer of MemClass is called ADDR:"<<this<<" size:"<<sizeof(*this)<<endl;
num = n;
}
MemClass(const MemClass &a)
{
cout<<"copy construct of MemClass is called Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
this->num = a.num;
}
MemClass& operator= (const MemClass& roe)
{
cout<<"operator= of MemClass is called Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
if (this == &roe) return *this;
this->num = roe.num;
return *this;
}
~MemClass()
{
cout<<"MemClass is destructed Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
};
class BigClass
{
private:
MemClass _a;
public:
BigClass()
{
cout<<"default Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
#ifdef CASE1
BigClass(const MemClass& a):_a(a)
{
cout<<"Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
}
#else
BigClass(const MemClass& a)
{
cout<<"Constructor of BigClass Addr:"<<this<<" size:"<<sizeof(*this)<<endl;
_a = a;
}
#endif
~BigClass(){cout<< "BigClass is destructed Addr:"<<this<<" size:"<<sizeof(*this)<<endl;}
};
int main()
{
BigClass big2(MemClass(1));
return 0;
}
以下是程序结果
- 成员初始化表的作用 实例解析
- 成员初始化表的作用 实例解析
- 成员初始化表的作用 实例解析
- C++成员初始化列表 的作用
- 类成员初始化实例
- 构造函数的成员初始化列表有什么作用?
- 包含对象成员的派生类的初始化实例
- java数据成员初始化实例
- 静态成员函数的作用与静态数据成员的初始化
- java类初始化中类成员的执行顺序解析
- 实例解析C#接口的作用
- HashCode的作用原理和实例解析
- HashCode的作用原理和实例解析
- HashCode的作用原理和实例解析
- HashCode的作用原理和实例解析
- java 父类子类静态成员,实例成员,构造函数初始化的顺序
- java 父类子类静态成员,实例成员,构造函数初始化的顺序
- 类成员的初始化
- 季宏敏对话冯庆
- javascript[js]获取url参数的代码
- Oracle授权访问
- JAVA反射使用手记
- Informix:Could not do a physical-order read to fetch netxt row异常
- 成员初始化表的作用 实例解析
- 季宏敏对话冯庆
- 随机提取N条记录的SQL语句(转)
- JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue
- 如何用 JavaScript 获取当前 URL 的文件名
- SCM软件配置管理
- C#对Outlook2010 编程
- Android 中的WiFi学习笔记——经典
- Jumping from IPv4 to IPv6