1. 空类

1.1 空类默认哪六个成员函数。

 class Empty
{
public:
Empty(); //缺省构造函数 Empty e;
Empty( const Empty& ); //拷贝构造函数 Empty e2(e1);
~Empty(); //析构函数
Empty& operator=( const Empty& ); //赋值运算符 Empty e2 = e1;
Empty* operator&(); //取址运算符 &e
const Empty* operator&() const; //取址运算符const &e
};

1.2 空类的sizeof()=1

每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址。

2. string类

以下四个函数,是C++编译器会自动加入的四个函数。

 class MyString
{
public:
MyString(const char *str = NULL);//默认参数,不传递的该参数的时候发挥作用。
MyString(const MyString &other);
MyString& operator=(const MyString &other);
~MyString();
private:
char *m_data;
};
MyString::~MyString()
{
delete [] m_data;
}
MyString::MyString(const char *str)
{
if(NULL == str)
{ cout<<"调用普通构造函数1"<<endl;
m_data = new char[];
*m_data = '\0';
}
else
{
cout<<"调用普通构造函数2"<<endl;
size_t length = strlen(str);
m_data = new char[length+];
strcpy(m_data,str);
}
}
MyString::MyString(const MyString &other)
{ cout<<"调用拷贝构造函数"<<endl;
size_t length = strlen(other.m_data);
m_data = new char[length+];
strcpy(m_data,other.m_data);
}
MyString& MyString::operator =(const MyString &other)
{
cout<<"调用赋值函数"<<endl;
//检查自赋值
if(this == &other)
return *this;
//释放原有的内存资源
delete [] m_data;
int length = strlen(other.m_data);
m_data = new char[length+];
strcpy(m_data,other.m_data);
return *this;
}
int _tmain(int argc, _TCHAR* argv[])
{
MyString s0;//"调用普通构造函数1"
MyString s1 = "hi";//"调用普通构造函数2"
MyString s2("hi");//"调用普通构造函数2" MyString s3 = s1;//"调用拷贝构造函数"上述实现为深拷贝。
MyString s4(s2);//"调用拷贝构造函数"
s4 = "hello!";//将"hello!"传入赋值函数形参时,要调用普通构造函数2;接着调用赋值函数。
s4 = s3;//"调用赋值函数"
return ;
}

总结:仅定义对象或者传递对象的时候调用构造函数。

说明:拷贝构造函数必须传引用。调用拷贝构造函数如果传值,编译器会新开辟一段栈内存,建立此对象的临时拷贝,而建立临时拷贝又需要值传递调用拷贝构造函数,如此

进入死循环,直至内存耗尽死机。而传引用则无需新开辟内存空间,无需调用构造函数,形参对象只是另一个对象的别名。

最新文章

  1. T-SQL学习记录
  2. Undefined symbols for architecture i386:和&quot;_OBJC_CLASS_$_xx&quot;, referenced from:问题解决方法
  3. laravel 开启sql查询日志
  4. 《javascript高级程序设计》第四章 Variables,scope,and memory
  5. HDU 4121 Xiangqi 我老了?
  6. openfire 最大连接数调优
  7. 惊叹jQuery(解决jQuery对象到DOM的转换)
  8. 【MySQL】Java对SQL时间类型的操作(获得当前、昨天、前年。。时间)
  9. Apache环境服务器配置Let&#39;s Encrypt免费SSL证书及自动续期方法
  10. ABP官方文档翻译 5.2 动态We API层
  11. poj 2503 查字典
  12. android ViewPager+Fragment之懒加载
  13. d3.js,初遇
  14. Spark机器学习(上)
  15. Servlet(四):转发与重定向、路径问题
  16. Linux多台主机间配置SSH免密登陆
  17. English trip EM2-PE-1B Teacher:Patirck
  18. django学习之——创建项目
  19. oletools下载安装及rtfobj使用
  20. php-fpm 启动参数及重要配置详解(转)

热门文章

  1. tornado 第一篇
  2. MySQL读写分离之amoeba
  3. CNN学习笔记:卷积运算
  4. 《TCP/IP详解:卷一》-TCP部分讲解
  5. linux命令(6/10):find 命令
  6. SVN使用—高级用法
  7. 如何评价一个pipeline的好坏
  8. 关于PropertyGrid控件的排序问题
  9. [BZOJ2815]灾难
  10. java object 转为 json