[期中][Class and Object] Cat Class 2

Problem Description
Please design a class Cat, which contains the following public member variables and functions:
请设计类 Cat, 它包含下面的公有成员变量和函数:

char * name
Cat(const char * name)
Cat(const Cat & cat)
Cat & operator = (const Cat & cat)
const char * get_name() const
~Cat()

Requirement: member variable name stores a dynamically allocated array of characters.
要求: 成员变量 name 存储的是一个动态分配的字符数组.

EXAMPLE INPUT

GHJOPIXM
ZLMCUOYRWJEHDQ

EXAMPLE OUTPUT

1
1
This is my cat: GHJOPIXM
1
1
This is my cat: ZLMCUOYRWJEHDQ

主程序(C/C++)

#include <iostream>
using namespace std;

#include "source.cpp"

void print_cat(const Cat& cat) {
    cout << "This is my cat: ";
    const char * name = cat.get_name();
    cout << name << endl;
}

int main() {
    string name, name2;
    cin >> name >> name2;
    Cat cat(name.c_str());
    Cat cat2(name2.c_str());
    cout << (cat.name == cat.get_name()) << endl;
    cout << (cat.name != name.c_str()) << endl;
    print_cat(cat);
    cat = cat2;
    cout << (cat.name == cat.get_name()) << endl;
    cout << (cat.name != cat2.name) << endl;
    print_cat(cat);
}

答案

#include <cstring>

class Cat
{
    void _copy(const char * n) {
        name = new char[strlen(n)+1];
        strcpy(name, n);
    }
    
public:
    char * name;
    Cat(const char * n) {
        _copy(n);
    }
    Cat(const Cat & cat) {
        _copy(cat.name);
    }
    ~Cat() {
        delete [] name;
    }
    Cat & operator = (const Cat & cat) {
        delete [] name;
        _copy(cat.name);
        return *this;
    }
    const char* get_name() const {
        return name;
    }
};

随机测试文本产生程序 (C)

#include "stdio.h"

int main() {
    printf("GHJOPIXM\n\
ZLMCUOYRWJEHDQ");
}
支持 makedown语法

仅有一条评论

  1. zhonghc

    #include
    class Cat{
    public:
    char * name;
    int size ;
    Cat(){
    size = 0 ;
    }
    void Stcrpy(const char *n ){
    this->size = strlen(n) + 1 ;
    this->name = new char[size];
    for (int i = 0; i < size ; ++ i){
    name[i] = n[i] ;
    }
    }
    Cat(const char * n ){
    Stcrpy(n) ;
    }

    Cat(const Cat & cat){
    Stcrpy(cat.name) ;
    }
    Cat & operator = (const Cat & cat){
    delete [] name ;
    Stcrpy(cat.name) ;
    return *this ;
    }
    const char * get_name() const{
    return name ;
    }

    ~Cat(){
    delete [] name ;
    }
    };

    zhonghc July 8th, 2021 at 08:10 pm回复