#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string.h>
#include<vector>
#include<string>
using namespace std;
class MyWord
{
public:
//定義myword類中的成員資料
static int num;
char* pdata;
int length;
const int a;
friend ostream& operator<<(ostream&, MyWord&);//宣告友元多載運算子“<<”函式
friend istream& operator>>(istream&, MyWord&);//宣告友元多載運算子“>>”函式
//建構式初始化a
MyWord(char* pd = "qwertyuiopasdfghjkl", int n = 0) :a(n)
{
length = strlen(pd);
pdata = new char[length + 1];
strcpy(pdata, pd); //將字串pd復制給pdata
cout << "開始呼叫建構式...." << endl;
}
//類中的深復制建構式
MyWord(const MyWord& s) :a(s.a)
{
length = s.length;
pdata = new char[length + 1];
strcpy(pdata, s.pdata);
cout << "進行了深復制建構式" << endl;
num++;
}
MyWord operator= (const MyWord& s) //多載=號
{
length = s.length;
pdata = new char[length + 1];
strcpy(pdata, s.pdata);
cout << "呼叫了多載的等號" << endl;
return *this;
}
~MyWord();//
};
ostream& operator<<(ostream&os, MyWord&MW)
{
os << MW.pdata;
return os;
}
istream& operator>>(istream&is, MyWord&MW)
{
is >> MW.pdata;
return is;
}
int MyWord::num = 0;
class Sentence:MyWord
{
public:
vector<MyWord>a;//繼承myword類
void Length();
void Add();
void Show();
void Menu();
};
//解構式
MyWord::~MyWord()
{
cout << "開始呼叫解構式...." << endl;
pdata[0] = '\0';
delete pdata; //資料的釋放
}
void Sentence::Length()
{
cout <<"句子長度為: "<<a.size() << endl;
}
void Sentence::Add()
{
MyWord word;
while (cin >> word)
{
a.push_back(word);
}
}
void Sentence::Show()//待完善
{
vector<MyWord>::iterator m = a.begin();
for (; m != a.end(); ++m)
{
cout << *m << endl;
}
}
void Sentence::Menu()
{
cout << endl;
cout << "**********************" << endl;
cout << "*** 0 結束行程 ***" << endl;
cout << "*** 1 添加單詞 ***" << endl;
cout << "*** 2 展示句子 ***" << endl;
cout << "*** 3 單詞個數 ***" << endl;
cout << "**********************" << endl;
cout << endl;
cout << "請輸入你的選擇序號:";
}
MyWord f(MyWord A)
{
MyWord D("abs", 3);
return D;
}
int main()
{
//測驗部分 待完善
cout << "************************" << endl;
cout << " 測驗開始 " << endl;
cout << "************************" << endl;
MyWord A("acsd");
MyWord C = A; //測驗深復制函式
C = f(A);
cout << "************************" << endl;
cout << " 測驗結束 " << endl;
cout << "************************" << endl;
char flag = '1';
Sentence S;
while (flag != '0')
{
S.Menu();
cin >> flag;
if (flag == '1')
S.Add();
else if (flag == '2')
S.Show();
else if (flag == '3')
S.Length();
else if (flag == '0');
else
{
cout << "輸入錯誤" << endl;
flag = 1;
}
}
}

uj5u.com熱心網友回復:
有記憶體泄露,在operator=。其次這個運算子應該回傳參考轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/205175.html
標籤:C++ 語言
