class private public protected class Student private char

  • Slides: 62
Download presentation

类的定义格式: class 类名 类名 关键字 { private : 成员数据; 私有 成员函数; public : 公有

类的定义格式: class 类名 类名 关键字 { private : 成员数据; 私有 成员函数; public : 公有 成员数据; 成员函数; 保护 protected: 成员数据; 成员函数; }; 分号不能少 class Student { private : char Name[20]; float Math; float Chiese; public : float average; void Set. Name(char *name); void Set. Math(float math); void Set. Chinese(float ch); float Get. Average(void); };

class Student { char Name[20]; float Math; 均为私有权限 float Chiese; public : float average;

class Student { char Name[20]; float Math; 均为私有权限 float Chiese; public : float average; void Set. Name(char *name); 均为公有权限 void Set. Math(float math); void Set. Chinese(float ch); float Get. Average(void); };

class A { float x, y; public: A 私有数据 void Setxy(float a, float b)

class A { float x, y; public: A 私有数据 void Setxy(float a, float b) { x=a; y=b; } void Print(void) 公有函数 x y Setxy () Print() { cout<<x<<‘t’<<y<<endl; } }; 在类外不能直接使用 x 或 y ,必须通过 Setxy()给 x 或 y 赋值,通过Print()输出 x 或 y 。

class A { float x, y; 在类体内说明 成员函数原型 public: void Setxy(float a, float b);

class A { float x, y; 在类体内说明 成员函数原型 public: void Setxy(float a, float b); void Print(void); }; void A: : Setxy(float a, float b) { x=a; y=b; } 在类体外定 义成员函数 void A: : Print(void) { cout<<x<<‘t’<<y<<endl; }

class A { float x, y; public: float m, n; void Setxy( float a,

class A { float x, y; public: float m, n; void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<‘t’<<y<<endl; }; void main(void) { A a 1, a 2; //定义对象 a 1. m=10; a 1. n=20; //为公有成员数据赋值 a 1. Setxy(2. 0 , 5. 0); //为私有成员数据赋值 a 1. Print(); } 输出: 2 5 a 1 x y m n } 2. 0 5. 0 10 20 Setxy () Print() a 2 x y m n Setxy () Print()

class A { float x, y; 必须通过类内公有函 public: 数访问私有数据成员 float m, n; void Setxy(

class A { float x, y; 必须通过类内公有函 public: 数访问私有数据成员 float m, n; void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<‘t’<<y<<endl; } }; void main(void) { A a 1, a 2; a 1. m=10; a 1. n=20; a 1. x=2; a 1. y=5; a 1. Setxy(2. 0, 5. 0); a 1. Print(); } //为公有成员数据赋值 非法,私有成员 不能在类外访问

class A { float x, y; public: float m, n; void Setxy( float a,

class A { float x, y; public: float m, n; void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<‘t’<<y<<endl; } }; void main(void) { A a 1, a 2; m=20; n=10; a 1. m=20; a 1. n=10; Setxy(2. 0, 5. 0); a 1. Setxy(2. 0, 5. 0); Print(); a 1. Print(); } } 不能直接调用 用对象名调用

class A { 类A:文件作用域,在 float x, y; 整个文件中有效 public: float m, n; void Setxy(

class A { 类A:文件作用域,在 float x, y; 整个文件中有效 public: float m, n; void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<‘t’<<y<<endl; } }a 3, a 4; 全局对象 void main(void) 局部对象 { A a 1, a 2; 类B:块作用域, class B{ 在函数内有效。 int i, j; public : void Setij(int m, int n){ i=m; j=n; } }; B b 1, b 2; a 1. Setxy(2. 0, 5. 0); b 1. Setij(1, 2); }

类的对象如何引用私有数据成员 1、通过公有函数为私有成员赋值 class Test{ int x , y; public: void Setxy(int a, int b){x=a;

类的对象如何引用私有数据成员 1、通过公有函数为私有成员赋值 class Test{ int x , y; public: void Setxy(int a, int b){x=a; y=b; } void Printxy(void) {cout<<"x="<<x<<'t'<<"y="<<y<<endl; }} ; void main(void) { Test p 1, p 2; p 1. Setxy(3, 5); p 1. Printxy( ); } 调用公有函数为 私有对象赋值

2、利用指针访问私有数据成员 class Test{ int x, y; public: void Setxy(int a, int b) {x=a; y=b;

2、利用指针访问私有数据成员 class Test{ int x, y; public: void Setxy(int a, int b) {x=a; y=b; } void Getxy(int *px, int *py) {*px=x; *py=y; } //提取x, y值 void Printxy(void){cout<<"x="<<x<<'t'<<"y="<<y<<endl; }}; px 3 x void main(void) &a a 3 5 y { Test p 1, p 2; py Setxy() p 1. Setxy(3, 5); b 5 &b Getxy() int a, b; p 1. Getxy(&a, &b); //将 a=x, b=y Printxy( cout<<a<<'t'<<b<<endl; } ) 输出: 3 5

3、利用函数访问私有数据成员 class Test{ int x, y; public: void Setxy(int a, int b) {x=a; y=b;

3、利用函数访问私有数据成员 class Test{ int x, y; public: void Setxy(int a, int b) {x=a; y=b; } int Getx(void) { return x; } //返回x值 int Gety(void) { return y; } //返回y值 void Printxy(void){cout<<"x="<<x<<'t'<<"y="<<y<<endl; }}; void main(void) 函数值就是私有 { Test p 1, p 2; p 1. Setxy(3, 5); 成员变量的值 int a, b; a=p 1. Getx( ); b=p 1. Gety(); //将 a=x, b=y cout<<a<<'t'<<b<<endl; }

4、利用引用访问私有数据成员 class Test{ int x, y; public: void Setxy(int a, int b){ x=a; y=b;

4、利用引用访问私有数据成员 class Test{ int x, y; public: void Setxy(int a, int b){ x=a; y=b; } void Getxy(int &px, int &py) { px=x; py=y; } //提取x, y值 void Printxy(void){cout<<"x="<<x<<'t'<<"y="<<y<<endl; }}; void main(void) x a 3 3 px { Test p 1, p 2; y 5 p 1. Setxy(3, 5); b Setxy() int a, b; py 5 Getxy() p 1. Getxy(a, b); //将 a=x, b=y Printxy( cout<<a<<'t'<<b<<endl; } 输出: 3 5 )

类引用举例(三角形类:三角形的三边及与三边相关的运算) class Triangle{ private: float a, b, c; //三边为私有成员数据 public: void Setabc(float x, float

类引用举例(三角形类:三角形的三边及与三边相关的运算) class Triangle{ private: float a, b, c; //三边为私有成员数据 public: void Setabc(float x, float y, float z); //置三边的值 void Getabc(float &x, float &y, float &z); //取三边 的值 float Perimeter(void); //计算三角形的周长 float Area(void); //计算三角形的面积 void Print(void); //打印相关信息 };

void Triangle: : Setabc (float x, float y, float z) {a =x; b=y; c=z;

void Triangle: : Setabc (float x, float y, float z) {a =x; b=y; c=z; } //置三边的值 void Triangle: : Getabc (float &x, float &y, float &z) //取三边的值 {x=a; y=b; z=c; } float Triangle: : Perimeter (void) {return (a+b+c)/2; } //计算三角形的周长 float Triangle: : Area (void) //计算三角形的面积 {float area,p; p= Perimeter(); area=sqrt((p-a)*(p-b)*(p-c)*p); return area; } void Triangle: : Print(void) //打印相关信息 {cout<<"Peri="<<Perimeter()<<'t'<<"Area="<<Area()<<endl; }

void main(void) { Triangle Tri 1; //定义三角形类的一个实例(对象) Tri 1. Setabc (4, 5, 6); //为三边置初值

void main(void) { Triangle Tri 1; //定义三角形类的一个实例(对象) Tri 1. Setabc (4, 5, 6); //为三边置初值 float x, y, z; Tri 1. Getabc (x, y, z); //将三边的值为x, y, z赋值 cout<<x<<'t'<<y<<'t'<<z<<endl; cout<<“s=”<<Tri 1. Perimeter ()<<endl; //求三角形的周长 cout<<“Area=”<<Tri 1. Area ()<<endl; //求三角形的面积 cout<<"Tri 1: "<<endl; Tri 1. Print (); //打印有关信息 }

类引用举例(学生类:学生的姓名成绩及相关的运算) class Stu { char Name[20]; //学生姓名 float Chinese; float Math; //语文成绩 //数学成绩 public:

类引用举例(学生类:学生的姓名成绩及相关的运算) class Stu { char Name[20]; //学生姓名 float Chinese; float Math; //语文成绩 //数学成绩 public: float Average(void); //计算平均成绩 float Sum(void); //计算总分 void Show(void); //打印信息 void Set. Student(char*, float); //为对象置姓名、成绩 }; void Set. Name(char *); //为对象置姓名 char *Get. Name(void); //取得学生姓名

float Stu: : Average(void){ return (Chinese+Math)/2; }//平均成绩 float Stu: : Sum(void){ return Chinese+Math; }//总分

float Stu: : Average(void){ return (Chinese+Math)/2; }//平均成绩 float Stu: : Sum(void){ return Chinese+Math; }//总分 void Stu: : Show(void) //打印信息 { cout<<"Name: "<<Name<<endl<<"Score: "<<Chinese<<'t'<< Math<<'t'<<"average: "<<Average()<<'t'<<"Sum: "<<Sum()<<endl; } void Stu: : Set. Student(char *name, float chinese, float math) { strcpy(Name, name); //置姓名 Chinese=chinese; //置语文成绩 Math=math; //置数学成绩} char * Stu: : Get. Name(void){ return Name; }//返回姓名

void main(void) { Stu p 1, p 2; p 1. Set. Student(“Li qing”, 98,

void main(void) { Stu p 1, p 2; p 1. Set. Student(“Li qing”, 98, 96); //对象置初值 p 2. Set. Student("Wang Gang", 90, 88); //对象置初值 p 1. Show(); //打印信息 p 2. Show(); //打印信息 p 1. Set. Name (“Zhao jian”); //重新置p 1对象的名字 p 1. Show (); cout<<“p 1. Name: ”<<p 1. Get. Name ()<<endl; //打印对象的 名字 cout<<“p 1. average: ”<<p 1. Average ()<<endl; //打印对象的 成绩 }

class Test{ int x , y; int m, n; 输出:x=3 y=5 x=10 y=20 m=30

class Test{ int x , y; int m, n; 输出:x=3 y=5 x=10 y=20 m=30 n=40 public: void Setxy(int a, int b){x=a; y=b; } void Setxy(int a, int b, int c, int d){ x=a; y=b; m=c; n=d; } void Printxy(int x) {cout<< “m="<<m<<'t'<<“n="<<n<<endl; } void Printxy(void) {cout<<"x="<<x<<'t'<<"y="<<y<<endl; }} ; void main(void) { Test p 1, p 2; p 1. Setxy(3, 5); p 2. Setxy(10, 20, 30, 40); //参数不同 p 1. Printxy(); p 2. Printxy(); p 2. Printxy(2); //参数、类型不同}

class Stu { char Name[20]; float Chinese; float Math; float English; float Physical; public:

class Stu { char Name[20]; float Chinese; float Math; float English; float Physical; public: float Average(void); //语文、数学平均成绩 float Average(int n); //四门课的平均成绩 float Sum(void); //语文、数学总分 float Sum(int n); //四门课总分 void Show(void); void Set. Student(char*, float); //置姓名、语文、数学初值 void Set. Student(char *, float, float); //置姓名、成绩 void Set. Name(char *); char *Get. Name(void); };

缺省参数的成员函数 class A{ float x, y; public: float Sum(void) { return x+y; } void

缺省参数的成员函数 class A{ float x, y; public: float Sum(void) { return x+y; } void Set(float a, float b=10. 0) { x=a; y=b; } void Print(void) {cout<<"x="<<x<<'t'<<"y="<<y<<endl; }}; void main(void) { A a 1, a 2; 不缺省参数,a 1. x=2, a 1. y=4 a 1. Set (2. 0, 4. 0); cout<<"a 1: "; a 1. Print (); cout<<"a 1. sum="<<a 1. Sum ()<<endl; a 2. Set(20. 0); 缺省参数,a 2. x=20, a 2. y=10 cout<<"a 2: "; a 2. Print (); cout<<"a 2. sum="<<a 2. Sum ()<<endl; }

a 1 定义类的指针及如何用指针来引用对象 2. 0 x p class A{ 3. 0 y float x,

a 1 定义类的指针及如何用指针来引用对象 2. 0 x p class A{ 3. 0 y float x, y; Setxy() public: Getxy() float Sum(void) { return x+y; } Printxy( void Set(float a, float b) { x=a; y=b; } ) void Print(void) { cout<<"x="<<x<<'t'<<"y="<<y<<endl; }}; void main(void) { A a 1, a 2; A *p; //定义类的指针 p=&a 1; //给指针赋值 p->Set(2. 0, 3. 0); //通过指针引用对象的成员函数 p->Print(); cout<<p->Sum()<<endl; a 2. Set(10. 0, 20. 0); a 2. Print(); }

返回引用类型的成员函数(可以返回私有数据成员的引用) class A{ float x, y; public: float &Getx(void ) { return x; }

返回引用类型的成员函数(可以返回私有数据成员的引用) class A{ float x, y; public: float &Getx(void ) { return x; } //返回x的引用 void Set(float a, float b) { x=a; y=b; } void Print(void) { cout<<x<<'t'<<y<<endl; } }; void main(void) { A a 1, a 2; a 1. Set (3, 5); cout<<"a 1: "; a 1. Print (); a 1. Getx()=30; //将a 1对象中的x成员赋值 cout<<"changed a 1: "; a 1. Print (); }

* * 2. 1 #include <iostream> * using namespace std; * class Time *

* * 2. 1 #include <iostream> * using namespace std; * class Time * {public: * int hour; * int minute; * int sec; }; * int main() * {Time t 1; * cin>>t 1. hour; cin>>t 1. minute; cin>>t 1. sec; * cout<<t 1. hour<<": "<<t 1. minute<<": "<<t 1. sec<<endl; * Time t 2; * cin>>t 2. hour; * cin>>t 2. minute; * cin>>t 2. sec; * cout<<t 2. hour<<": "<<t 2. minute<<": "<<t 2. sec<<endl; * return 0; *}

* 2. 2 #include <iostream> * using namespace std; * class Time * {public:

* 2. 2 #include <iostream> * using namespace std; * class Time * {public: * int hour; * int minute; * int sec; * }; * int main() * {Time t 1; * cin>>t 1. hour; * cin>>t 1. minute; * cin>>t 1. sec; * cout<<t 1. hour<<": "<<t 1. minute<<": "<<t 1. sec<<endl; * Time t 2; * cin>>t 2. hour; cin>>t 2. minute; cin>>t 2. sec; * cout<<t 2. hour<<": "<<t 2. minute<<": "<<t 2. sec<<endl; * return 0; }

* 2. 2 b #include <iostream> * using namespace std; * class Time *

* 2. 2 b #include <iostream> * using namespace std; * class Time * {public: * int hour; * int minute; * int sec; }; * int main() * {void set_time(Time&, int hour=0, int minute=0, int sec=0); * void show_time(Time&); * Time t 1; * set_time(t 1, 12, 23, 34); * show_time(t 1); * Time t 2; * set_time(t 2); * show_time(t 2); * return 0; } * void set_time(Time& t, int hour=9, int minute=30, int sec=0) * {t. hour=hour; * t. minute=minute; * t. sec=sec; } * void show_time(Time& t) * { cout<<t. hour<<": "<<t. minute<<": "<<t. sec<<endl; }

* 2. 3 #include <iostream> * using namespace std; * class Time * {public:

* 2. 3 #include <iostream> * using namespace std; * class Time * {public: * void set_time() ; * void show_time(); * private: * int hour; * int minute; * int sec; }; * int main() * { Time t 1; * t 1. set_time(); t 1. show_time(); Time t 2; * t 2. set_time(); * t 2. show_time(); * return 0; } * void Time: : set_time() * { cin>>hour; cin>>minute; cin>>sec; } * void Time: : show_time() * { cout<<hour<<": "<<minute<<": "<<sec<<endl; }

* 2. 4 #include <iostream> * using namespace std; * class Array_max * {public:

* 2. 4 #include <iostream> * using namespace std; * class Array_max * {public: * void set_value(); void max_value(); * private: * int array[10]; int max; }; * void Array_max: : set_value() * { int i; * for (i=0; i<10; i++) cin>>array[i]; } * void Array_max: : max_value() * {int i; max=array[0]; * for (i=1; i<10; i++) * if(array[i]>max) max=array[i]; } * void Array_max: : show_value() * {cout<<"max="<<max; } * int main() * {Array_max arrmax; * arrmax. set_value(); * arrmax. max_value(); * arrmax. show_value(); * return 0; } void show_value();