基于对象的程序设计(OOP)

来源:互联网 发布:游戏源码交易平台 编辑:程序博客网 时间:2024/06/05 23:40

一、类的基本知识

1. 层次:类>对象>类体:成员(成员变量、成员函数)

ps:其中,类体可以是public,也可以是private,public则可以被外界调用,而private则不能被外界调用

2. 定义成员函数

法一:函数体>3行:在类体内声明成员函数,在类体外定义成员函数(最常用)
法二:函数体<3行:在声明类时在类体内定义

//方法一:在类体内声明成员函数,在类体外定义成员函数class Student{public:    void display();   //在类体内声明成员函数 private:     int num;     string name;     char sex;};void Student::display()//在类体外定义成员函数{cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;}Student stud1.stud2;//方法二:在声明类时在类体内定义class Student{private:     int num;     string name;     char sex; public:     void display()    {cout<<"num:"<<num<<endl;     cout<<"name:"<<name<<endl;     cout<<"sex:"<<sex<<endl;    }};Student stud1.stud2;

3. 对象成员的引用

语法:对象名.成员名
例子:对num变量进行赋值:stud1.num = 1001

4. 例子

写程序的思路:
1)定义类变量(私有),声明成员函数(公有)
2)定义成员函数们
3)在主函数中调用成员函数(在调用的时候声明类对象)

例1: 定义多个类对象,定义成员函数,分别输入、输出各对象中的时间,(时:分:秒)
法一:在类外定义函数

#include <iostream>using namespace std;//step1:定义类变量(私有),声明成员函数(公有)class Time{    public:        void set_time();          void show_time();    private:        int hour,minute,sec; };//step2:定义成员函数set_time()和show_time()void Time::set_time() {    cin>>hour;    cin>>minute;    cin>>sec;}void Time::show_time() {    cout<<hour<<":"<<minute<<":"<<sec;}//step3:在主函数中调用成员函数int main(){    Time t1; //在调用的时候声明类对象    t1.set_time();      t1.show_time();    Time t2;    t2.set_time();    t2.show_time();    return 0;}

法二:在类体内定义函数

#include <iostream>using namespace std;class Time{    public:        void set_time()        {            cin>>hour;            cin>>minute;            cin>>sec;        }        void show_time()        {            cout<<hour<<":"<<minute<<":"<<sec;        }    private:        int hour,minute,sec;};int main(){    Time t1;    t1.set_time();    t1.show_time();    Time t2;    t2.set_time();    t2.show_time();    return 0;}

例2: 需要求3个长方体的体积,请编写一个基于对象的程序。数据成员包括length(长)、width(宽)、height(高)。要求用成员函数实现以下功能:
(1) 由键盘分别输入3个长方体的长、宽、高
(2) 计算长方体的体积
(3) 输出3个长方体的体积

#include <iostream>using namespace std;class RT{    public:        void set()        {            cin>>length;            cin>>wide;            cin>>high;        }        void v()        {            vol=length*wide*high;            cout<<"v="<<vol<<endl;        }    private:        int length,wide,high,vol;};int main(){    RT r1 ;    r1.set();    r1.v();    RT r2 ;    r2.set();    r2.v();    RT r3 ;    r3.set();    r3.v();    return 0;}

二、类的进阶:构造函数

作用:使对象初始化,即利用构造函数对对象中的数据成员赋初值
说明:构造函数不需要调用,在建立类对象时,系统会自动调用构造函数。
规则:
1)构造函数必须与类名同名,不具有任何类型,不返回任何值
2)和成员函数一样,一般在类体内声明,在类体外定义

1. 无参数

Time(); //在类体内声明构造函数......Time::Time() //在类体外定义构造函数{    hour=0;    minute=0;    sec=0;}

2. 有参数

Complex(double r=0,double i=0); //类体内:声明构造函数的同时初始化(即:赋初值)//ps:这里之所以要初始化对象数据成员,是因为最后建立对象c3时,没有传递实参,因此必须要有初始化的值才行......Complex::Complex(double r,double i) //类体外:定义构造函数,即往里面写内容,建立对象们共有的数据成员的初始值或函数表达式{      real=r;imag=i;} //ps:如果前面在类体内声明构造函数时,已经初始化了对象成员,那么在类体外定义时就只规定函数表达式就好了//回忆:real和imag是类体中私有部分的数据成员,定义构造函数时,先把形参传给数据成员,再在后面建立类对象时,把实参传递给函数......Complex c1(3,4),c2(5,-10),c3;//主函数中:建立类对象时,传递实际参数

补充:在重载那一小节,matrix相加是无参构造函数,而复数相加是有参构造函数。