Download presentation
Presentation is loading. Please wait.
1
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计
2
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 类的静态成员 包含内嵌对象的派生类构造 常对象和常成员 类的组合 赋值运算符重载
友元 运算符重载 包含内嵌对象的派生类构造 包含内嵌对象的派生类析构 赋值运算符重载 C++语言程序设计
3
刨根问底 a C++语言程序设计
4
(I)赋值运算符重载 例:重载“=”为成员函数 C++语言程序设计 #include <iostream>
using namespace std; class student{ public: student(int i=0, char* c=NULL, float s=0); //构造函数 student(const student&); //复制构造函数 student& operator = (const student&); //重载赋值运算符 ~student() { delete []name; } //析构函数 void printstu (){cout<<“学号:”<<id<<“ 姓名:”<<name <<“ 成绩:"<<score<<endl;} private: int id; char* name; float score; }; C++语言程序设计
5
(I)赋值运算符重载 C++语言程序设计 //构造函数 student::student(int i, char* c, float s)
{ id = i; score = s; if (c==NULL) name=NULL; else name = new char[strlen(c)+1]; strcpy(name, c); } 如果在类的构造过程中动态申请了堆内存,必须显示定义复制构造函数和重载赋值运算符 C++语言程序设计
6
(I)赋值运算符重载 C++语言程序设计 //复制构造函数 student::student(student& s) {
id=s.id; //一般成员简单复制 score=s.score; //先申请堆空间 name = new char[strlen(s.name)+1]; if (name != 0) strcpy(name, s.name); //复制字符串 } 复制构造函数在创建对象时调用,因为此时对象还不存在,只需要直接申请新的空间即可 C++语言程序设计
7
(I)赋值运算符重载 C++语言程序设计 //重载赋值运算符函数
student& student::operator = (student& s) { id=s.id; //一般成员简单复制 score=s.score; delete []name; name=new char[strlen(s.name)+1]; strcpy(name,s.name); return *this; } 赋值运算符在对象已存在的条件下调用,因此需要先释放原对象占用的空间,然后申请新的空间 C++语言程序设计
8
(I)赋值运算符重载 C++语言程序设计 void main() { student s1(1,"wang",86);
s1.printstu(); student s2; s2=s1; s2.printstu(); } C++语言程序设计
Similar presentations