2026/4/5 16:47:04
网站建设
项目流程
作业要求重载User类的操作符使得os user打印User(nameAlice, friends[Bob, Charlie])实现SMF中的destructor,copy constructor,copy assignment operator,并禁用move constructor,move destructor重载User类的操作符使得操作符左右两侧的User彼此add_friend;重载User类的操作符按名称的字符顺序比较两个User的大小问题及解决operator的返回值operator的返回值是std::ostream其中传引用是为了保证能够链式运算避免拷贝std::ostreamoperator(std::ostreamos,constTobj){// write obj to streamreturnos;}destructor详解destructor需要删除的对象分配的内存打开的文件classFileHandler{FILE*file_;char*buffer_;public:// 析构函数必须释放所有资源~FileHandler(){delete[]buffer_;// 释放内存if(file_){fclose(file_);// 关闭文件}}};copy assignment operator细节在实现copy assignment operator时我们需要删除当前对象在赋值前分配的内存UserUser::operator(constUseruser){_nameuser._name;...delete[]_friends;//需要删除释放旧内存..._friendsnewFriends;return*this;}user.cpp代码#includeuser.h/** * Creates a new User with the given name and no friends. */User::User(conststd::stringname):_name(name),_friends(nullptr),_size(0),_capacity(0){}/** * Adds a friend to this Users list of friends. * param name The name of the friend to add. */voidUser::add_friend(conststd::stringname){if(_size_capacity){_capacity2*_capacity1;std::string*newFriendsnewstd::string[_capacity];for(size_t i0;i_size;i){newFriends[i]_friends[i];}delete[]_friends;_friendsnewFriends;}_friends[_size]name;}/** * Returns the name of this User. */std::stringUser::get_name()const{return_name;}/** * Returns the number of friends this User has. */size_tUser::size()const{return_size;}/** * Sets the friend at the given index to the given name. * param index The index of the friend to set. * param name The name to set the friend to. */voidUser::set_friend(size_t index,conststd::stringname){_friends[index]name;}std::ostreamoperator(std::ostreamos,constUseruser){osUser(nameuser._name, friends[;if(user._size0){for(size_t i0;iuser._size-1;i){osuser._friends[i], ;}osuser._friends[user._size-1];}os]);returnos;}User::~User(){delete[]_friends;}User::User(constUseruser):_name(user._name),_size(user._size),_capacity(user._capacity){std::string*newFriendsnewstd::string[_capacity];for(size_t i0;i_size;i){newFriends[i]user._friends[i];}this-_friendsnewFriends;}UserUser::operator(constUseruser){_nameuser._name;_sizeuser._size;_capacityuser._capacity;delete[]_friends;std::string*newFriendsnewstd::string[_capacity];for(size_t i0;i_size;i){newFriends[i]user._friends[i];}_friendsnewFriends;return*this;}Useroperator(Useruser1,Useruser2){user1.add_friend(user2._name);user2.add_friend(user1._name);returnuser1;}booloperator(constUseruser1,constUseruser2){returnuser1._nameuser2._name;}user.h代码/* * CS106L Assignment 5: TreeBook * Created by Fabio Ibanez with modifications by Jacob Roberts-Baca. */#includeiostream#includestringclassUser{public:User(conststd::stringname);voidadd_friend(conststd::stringname);std::stringget_name()const;size_tsize()const;voidset_friend(size_t index,conststd::stringname);friendstd::ostreamoperator(std::ostreamos,constUseruser);~User();User(constUseruser);Useroperator(constUseruser);User(constUseruser)delete;Useroperator(constUseruser)delete;friendUseroperator(Useruser1,Useruser2);friendbooloperator(constUseruser1,constUseruser2);private:std::string _name;std::string*_friends;size_t _size;size_t _capacity;};