栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++类的继承与派生的应用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++类的继承与派生的应用

1.定义一个基类BaseString,实现字符串基本的输入功能,其结构如下:

    1. 保护数据成员

char  Data[50]; // 字符串数组

unsigned int Length; // 字符串长度,包括结束字符””

    1. 构造函数和析构函数实现继承关系中调用顺序
    2. 返回字符串长度成员函数  unsigned int GetLength( );
    3. 输出数据成员函数 void Display( );
    4. 类外访问数据成员函数 char * GetData( );
  1. 成员函数实现键盘输入字符串,为类对象的数据成员赋值 Void Input( );

2.定义BaseString的公有派生类ReString,实现字符串的倒置功能

  1. void Inverse( ); //如原字符串“ABC”,倒置后“CBA”

3.定义BaseString的保护派生类CopyString,实现字符串的copy功能

  1. void Copy(const CopyString  &ob);  //把对象ob 拷贝到当前对象成员中

4.定义BaseString的私有派生类CmpString,实现字符串的比较功能

  1. int Compare(const CmpString  &ob );  

返回值=1,表示当前对象字符串长度>ob字符串长度

返回值=0,表示当前对象字符串长度=ob字符串长度

返回值= -1,表示当前对象字符串长度

5.定义NewString公有继承自ReString,CopyString,CmpString

  1. 在程序中体现多重继承中构造函数的调用顺序
  2. 解决二义性问题(就是在继承的时候声明虚基类)
  3. 为基类BaseString,ReString,CopyString,CmpString增加带参数的构造函数,实现构造函数的参数传递

VS2019环境

#include
using namespace std;
#define maxsize 50
class Basestring {
protected:
    char Data[maxsize];
    int unsigned Length;
public:
    Basestring(char *a);
    Basestring();
    ~Basestring();
    unsigned int GetLength();
    void Display();
    char* GetData();
};
Basestring::Basestring(char *a) {
    Length = strlen(a) + 1;
    for (int i = 0; i < Length; i++) {
        Data[i] = a[i];
    }
}
Basestring::Basestring() {
    Data[maxsize - 1] = { '' };
    Length = 0;
    cout << "BaseString finish" << endl;
}
Basestring::~Basestring() {
    Data[maxsize - 1] = { '' };
    Length = 0;
    cout << "~break basestring" << endl;
}
unsigned int Basestring::GetLength() {
    return Length;
}
void Basestring::Display() {
    cout << Data << endl;
}
char* Basestring::GetData() {
    return Data;
}
class ReString :virtual public Basestring {
public:
    ReString(char* a):Basestring(a){}
    ReString();
    void Inverse();
    void Display();
};
ReString::ReString() {
    Data[maxsize - 1] = { '' };
    cout << "ReString Finish" << endl;
}
void ReString::Display() {
    cout << Data << endl;
}
void ReString::Inverse() {
    for (int i = 0; i < (Length - 1)/2; i++) {
        char a;
        a = Data[i];
        Data[i] = Data[Length - i - 2];
        Data[Length - i - 2] = a;
    }
    Data[Length - 1] = '';
}
class CopyString :virtual protected Basestring {
public:
    CopyString();
    CopyString(char* a) :Basestring(a) {}
    void Copy(const CopyString& ob2);
    void Display();
};
CopyString::CopyString() {
    cout << "CopyString Finish" << endl;
}
void CopyString::Display() { 
    Basestring::Display(); 
}
void CopyString::Copy(const CopyString& ob2) {
    for ( int i = 0; i < ob2.Length; i++) {
        Data[i] = ob2.Data[i];
        Length = ob2.Length;
    }
}
class CmpString :virtual private Basestring {
public:
    CmpString();
    CmpString(char* a):Basestring(a){}
    int Compare(const CmpString &ob2);
    void Display() { Basestring::Display(); }
};
CmpString::CmpString() {
    cout << "CmpString Finish" << endl;
}
int CmpString::Compare(const CmpString &ob2) {
    if (Length > ob2.Length) {
        return 1;
    }
    else if (Length == ob2.Length) {
        return 0;
    }
    else {
        return -1;
    }
}
class NewString:public ReString,public CopyString,public CmpString {
public:
    NewString(){}
    NewString(char* a):Basestring(a) {}//int a(6);
    void Display() { Basestring::Display(); }
};


int main() {
    char str[maxsize], Str[maxsize];
    cout << "Enter String1" << endl;
    cin >> Str;
    cout << "Enter String2" << endl;
    cin >> str;
    NewString Bastr(Str),Bas(str);
    int command,com=1;
    while (com) {
        cout << "验证功能" << endl << "0:Basestring" << endl << "1:restring" << endl << "2:Bastrystring" << endl << "3:cmpstring" << endl;
        cin >> command;
        switch (command)
        {
        case 0:
            Bas.Display();
            cout << Bas.GetLength()< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号