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 ;
}

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

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

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

C++空类和string类的更多相关文章

  1. Java的常用类——Object类、String类

    Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...

  2. Java Object类 和 String类 常见问答 6k字+总结

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  3. C#中 StringBuilder类 与 String类的区别---(转)

      在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...

  4. Hadoop: Text类和String类的比较

    一般认为Text类和String类是等价的,但二者之间其实存在着不小差别: 以<Hadoop权威指南>中的案例为例,给定字符串  String s = "\u0041\u00DF ...

  5. Java基础知识强化32:String类之String类的判断功能

    1. String类的判断功能: boolean equals (Object obj ) boolean equalsIgnoreCase (String str ) boolean contain ...

  6. 07 Object类,Scanner,Arrays类,String类,StringBuffer类,包装类

    Object类的概述:* A:Object类概述    * 类层次结构的根类    * 所有类都直接或者间接的继承自该类* B:构造方法    * public Object()    * 子类的构造 ...

  7. StringBuffer类和String类(原文地址 : http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html)

    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

  8. (1)Object类 (2)包装类和数学处理类 (3)String类

    1.Object类1.1 基本概念 java.lang.Object类是Java类层次结构的根类,任何类都是Object类的直接/间接子类. 1.2 常用的方法(重点) Object() - 无参构造 ...

  9. Object类和String类

    Object类 Object类是Java语言中的根类,即所有类的父类. equals方法 返回值类型为:boolean类型 用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较. 例子: ...

随机推荐

  1. 我的Android进阶之旅------>Android studio 如何修改工程的包名

    关于用Android Studio修改Android APP的应用包名的问题,今天遇到了一个坑,这里记录一下. 这里用一个简单的Demo来展示在Android Studio中如何修改Android P ...

  2. Struts 2 类型转换器 输入校验 拦截器

    Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换. OGNL项目中有一个TypeConvert接口,这个接口是自定义类型 ...

  3. Nginx+Springboot+Vue 前后端分离 解决跨域问题

    1:前端vue 写完 打包 npm run build prod 2: 后端api 写完打包 springboot mvn package -Dmaven.test.skip=true 3: ngin ...

  4. Android开发之事件和事件监听器

    写了一个打飞机的小程序,用于作为事件监听的学习,此程序须要有实体按键的手机才干运行. PlaneView.java: public class PlaneView extends View{ publ ...

  5. asp.net Mvc Npoi 导出导入 excel

    因近期项目遇到所以记录一下: 首先导出Excel : 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// < ...

  6. 转:[NHibernate]视图处理

    转自:http://www.cnblogs.com/wolf-sun/p/4082899.html 目录 写在前面 文档与系列文章 视图 一个例子 总结 写在前面 前面的文章主要讲了对物理数据表的操作 ...

  7. cmd 命令 记忆

    1,“开始”—>“运行”,输入cmd,回车.<或 win+R> 2,出现“命令提示符”的窗口,一般情况下是 C:\Documents and Settings\Administrat ...

  8. 【HTML5校企公益课】第四天

    1.上午考试没去.. 2.下午跟不上.. 变色.html <!DOCTYPE html> <html> <head> <meta charset=" ...

  9. uvm学习杂记

    一个类,只定义了而没有实例化,是没有任何意义的,但也有特殊情况,对于一个静态类,即其成员变量都是静态的,不实例化也可以正常使用: 类要想和DUT通信,不能在类里定义接口,会报错,只能在类里定义虚拟接口 ...

  10. Spring_Bean 之间的关系

    beans-relation.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns=& ...