[C++]C++学习笔记(四)

1,C++为类提供的特殊成员函数 默认构造函数  编译器提供一个不接受任何参数,也不执行任何操作的构造函数,在创建类对象的时候会被调用,如果现式的定义了构造函数,那么 默认构造函数将不会被调用。 默认析构函数   复制构造函数  复制构造函数用于将一个对象复制到新创建的对象中,它用户在初始化过程中而不是在赋值过程中,类的复制构造函数的原型如下Class_name(const Class_name &);  何时调用复制构造函数:新建一个类对象并将其初始化为同类现有的类对象的时候,复制构造函数将被调用。  假设motto是一个StringBad类的对象,则以下几种情况都将调用复制构造函数  StringBad ditto(motto);  StringBad ditto=motto;  StringBad ditto =StringBad(motto);  每当程序生成对象的副本时候,都将调用复制构造函数,比如按值传递, 复制构造函数的作用是逐个复制非静态成员的值 在类的设计中应该定义一个显式的复制构造函数,使每个对象都有自己的内存空间 赋值运算符  在类的设计中应该定义一个显式的赋值重载运算符,使每个对象都有自己的内存空间, 地址运算符

2,类的静态成员函数  1,不能通过对象去调用静态成员函数,因为静态成员函数是属于整个类的,  2,因为静态成员函数不与特定的对象关联,所以只能调用静态成员

  1. #include <stdio.h>   
  2. #include <string.h>  
  3. #include <stdlib.h>  
  4.   
  5. class String{  
  6. public:  
  7.     String(const char*str = NULL);  
  8.     String(const String &another);  
  9.     ~String();  
  10.     String& operator =(const String &rhs);  
  11. private:  
  12.     char* m_data;  
  13. };  
  14.   
  15.   
  16. String::String(const char*str)  
  17. {  
  18.     if(str == NULL)  
  19.     {  
  20.         m_data = new char[1];  
  21.         m_data = '';  
  22.     }  
  23.     else  
  24.     {  
  25.         m_data = new char[strlen(str)+1];  
  26.         strcpy(m_data,str);  
  27.     }  
  28. }  
  29.   
  30. String::String(const String&another)  
  31. {  
  32.     m_data = new char[strlen(another.m_data)+1];  
  33.     strcpy(m_data,another.m_data);  
  34. }  
  35.   
  36. String & String::operator=(const String &rhs)  
  37. {  
  38.     if(this ==&rhs)  
  39.     {  
  40.         return *this;  
  41.     }  
  42.     delete []m_data;  
  43.     m_data = new char[strlen(rhs.m_data)+1];  
  44.     strcpy(m_data,rhs.m_data);  
  45.     return*this;  
  46. }  
  47.   
  48. String::~String()  
  49. {  
  50.     delete []m_data;  
  51. }  
原文地址:https://www.cnblogs.com/zhiliao112/p/4069202.html