c++学习日记之类和动态内存分配

来源:互联网 发布:js垂直轮播广告幻灯片 编辑:程序博客网 时间:2024/05/29 02:52
本篇文章主要内容为c++primer中第12章的内容。复习对类成员使用动态内存分配。学会构造复制构造函数,在构造函数中使用new等。
代码如下:
string.h文件
#ifndef STRING_H_#define STRING_H_#include <iostream>using std::ostream;using std::istream;class String{private:char *str;int len;static int num_strings;static const int CINLIM=80;public:String(const char *s);//constructorString();             //default constructorString(const String &);//copy constructor~String();int length() const {return len;}//overloaded operator methodsString & operator = (const String &);String & operator =(const char *);char   & operator [] (int i);const char & operator [](int i) const;//overloaded operator friendsfriend bool operator < (const String &st,const String &s2);friend bool operator > (const String &st,const String &s2);friend bool operator ==(const String &st,const String &s2);friend ostream & operator << (ostream & os,const String &st);friend istream & operator >>(istream & is,String &st);static int HowMany();};#endif


string.cpp文件
#include "string.h"#include<cstring>using std::cin;using std::cout;int String::num_strings=0; // initialiazing static class menber// const int String::CINLIM=80;// static methodint String::HowMany(){return num_strings;}String::String(const char *s){len=strlen(s);str=new char[len+1];strcpy_s(str,len+1,s);num_strings++;}String::String(){len=4;str=new char[1];str[0]='\0';num_strings++;}String::String(const String &st){num_strings++;len=st.len;str=new char[len+1];strcpy_s(str,len+1,st.str);}String::~String(){--num_strings;delete []str;}//overloaded operator methodsString & String::operator=(const String &st){if(this == &st)return *this;delete [] str;len = st.len;str=new char[len+1];strcpy_s(str,len+1,st.str);num_strings++;return *this;}String & String::operator=(const char *s){delete []str;len = strlen(s);str = new char[len + 1];strcpy_s(str,len+1,s);return *this;}char & String::operator[](int i){return str[i];}const char & String::operator[](int i) const{return str[i];}//overloaded operator friendsbool operator < (const String &st1,const String &st2){return strcmp(st1.str,st2.str)<0;}bool operator > (const String &st1,const String &st2){return st2<st1;}bool operator == (const String &st1,const String &st2){return strcmp(st1.str,st2.str)==0;}ostream & operator << (ostream &os,const String & st){os<<st.str;return os;}istream & operator >> (istream & is,String & st){char temp[String::CINLIM];is.get(temp,String::CINLIM);if(is)st = temp;while(is&&is.get()!='\n')continue;return is;}


main 函数
#include<iostream>#include "string.h"const int ArSize = 10;const int Maxlen =81;int main(){using std::cout;using std::cin;using std::endl;String name;cout << "Hi,what's your name?\n>>";cin >> name;cout << name<< ", please enter up to " << ArSize    << " short saying<empty line to quit>:\n";String saying[ArSize];char temp[Maxlen];int i;for(i=0;i<ArSize;i++){cout << i+1 << ": ";cin.get(temp,Maxlen);while(cin&&cin.get()!='\n')continue;if (!cin ||temp[0]=='\n') //empty line quit;break;elsesaying[i]=temp;}int total =i;if (total > 0){cout << "Here are your saying:\n";for(i=0;i<total;i++)cout << saying[i][0] << ":"<< saying[i] <<endl;int shortest =0;int first =0;for(i=1;i<total;i++){if(saying[i].length()<saying[shortest].length())shortest=i;if(saying[i]<saying[first])first=i;}cout << "shortest saying:\n" << saying[shortest] << endl;cout << "first alphabetically:\n" << saying[first] <<endl;cout << "this program used" << String::HowMany() <<"String objects.bye!"<<endl;}elsecout << "no input ! bye.";return 0;}


运行结果如下:
0 0
原创粉丝点击