隐式成员函数
隐式成员函数.
1 .默认构造函数
声明 ClassName();
ClassName::ClassName(){}
2.复制构造函数
//*在参数传值时或返回对象时一定被调用
声明 ClassName(const ClassName &);
1>新建对象并将其初始化为同类对象时调用
ClassName cla(cal2); //直接创建
ClassName cla=cla2; //有可能生成临时对象
ClassName cla=ClassName(cla2); //有可能生成临时对象
ClassName * psd=new ClassName(cla); //由delete释放
2>复制构造函数功能
逐个复制非静态成员
ep:
cla.str=cla2.str;
cla.len=cla2.len;
…
3.赋值操作符
声明 ClassName & operator = (const ClassName &);3
类中包含"new" "初始化"的指针成员
需要深度复制 strcpy
而不是cla.str=cla.str2;(复制的是一个地址)
////////////////////////////////////////////////////
///////////////main.cpp/////////////////////////////
#include <iostream>
#include "strngbad.h"
using std::cout;
void callme1 (String &);
void callme2 (String);
int main()
{
using std::endl;
String headline1("celery stalks at midnight");
String headline2("lettuce prey");
String sports("sadsadasd asd sad");
cout<<"headline1"<<headline1<<endl;
cout<<"headline2"<<headline1<<endl;
cout<<"sports"<<sports<<endl;
callme1(headline1);
cout<<"headline1"<<headline1<<endl;
callme2(headline2);
cout<<"headline2"<<headline1<<endl;
cout<<"initialize one obj to another:\n";
String knot;
knot=headline1;
cout<<"knot:"<<knot<<endl;
cout<<"end of main()\n";
return 0;
}
void callme1(String & rsb)
{
cout<<"str reference:\n";
cout<<" \""<<rsb<<"\"\n";
}
void callme2(String sb)
{
cout<<"str value:\n";
cout<<" \""<<sb<<"\"\n";
}
/////////////////////////////////////////////////////////////
////////////////strngbad.h///////////////////////////////////
#include <iostream>
#ifndef STRNGBAD_H_
#define STRNGBAD_H_
class String
{
private:
char * str;
int len;
static int num_strings;
public:
String(const char * s);
String(const String &);
String();
~String();
String & operator = (const String &);
friend std::ostream & operator << (std::ostream & os,const String & st);
};
#endif
//////////////////////////////////////////////////////////
///////////////////////strngbad.cpp///////////////////////
#include <cstring>
#include "strngbad.h"
using std::cout;
int String::num_strings=0;
String::String(const char * s)
{
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
num_strings++;
cout<<num_strings<<": \""<<str<<"\"object created\n";
}
String::String(const String & st)
{
num_strings++;
len=st.len;
str=new char [len+1];
strcpy(str,st.str);
cout<<num_strings<<":\""<<str<<"\" obj created\n";
}
String::String()
{
len=4;
str=new char[4];
strcpy(str,"c++");
num_strings++;
cout<<num_strings<<": \""<<str<<"\"object created\n";
}
String::~String()
{
cout<<"\""<<str<<"\" object deleted,";
--num_strings;
cout<<num_strings<<" left\n";
delete [] str;
}
String & String::operator = (const String & st)
{
if (this==&st)
return *this;
delete [] str;
len=st.len;
str=new char [len+1];
strcpy(str,st.str);
return *this;
}
std::ostream & operator << (std::ostream & os,const String & st)
{
os<<st.str;
return os;
}


浙公网安备 33010602011771号