对象:此对象,非彼对象,:-D,跟妹子无关(不过貌似也可以,,),闲言少叙,书归正传

我们可以把我们见到的一切事物都称为对象。它可以有形,可以无形,可以简单,可以复杂,但是对某一种具体的对象,比如公司。

抽象:

我们可抽象出所有公司都具有的属性,比如公司名字,地址,所属行业等,这些共同属性就构成了一种类型-公司类。由此得出计算机中类的理解,面对一个具体的问题(对象),首先进行抽象,得到这类具体问题的共有性质,一般的抽象应该包括两部分:数据抽象和行为抽象,前者描述的是对象的属性或状态,后者描述的是共同行为或功能。

封装:

封装就是将得到的数据和行为结合,形成一个有机体,也就是将数据和操作数据的函数代码结合,形成“类”,其中的数据和函数都是类的成员。 

继承:

为了解决当前问题,我们一般会查看前人已经对这个问题的认识和研究成果,并对这些成果进行利用。这就是继承,这有这样才能在对问题有深入的了解。即,继承前人的成果。

多态:

多态是程序能够处理多种类型对象的能力,c++中通过强制多态,重载多态,类型参数多态,包含多态来实现。

 

类:

类是对问题的抽象描述,是对对象的相关函数和数据的封装。我们可以从另一个简单的角度理解类,例如,基本数据类型,像int,double等,我们声明一个类型变量

int i;

double j;

不仅仅是声明变量i用于存储int类的数据,更重要的是,限定对变量的操作,比如int类型的只能进行算数和比较运算等,这说明每一种数据类型包括了数据本身的属性和对数据的操作。因此c++中的类就可以看成是一种用户自定义的数据类型,定义一个类之后,就可以定义该类的变量,这个变量就称为这个类的对象(实例),这个过程也叫做类的实例化。

  类的定义语法:

class  类名称

{

      public:

            外部接口;

      protected:

            保护型成员;

      private:

           私有成员;

};//注意这里有一个分号哟!

 其中public,protected,private 分别代表成员的不同访问权限。注意,类中可以只声明函数的原型,函数的实现可以在类外面定义。

example:

 

class clock

{

 public:

            void settime(int newh,int newm,int news);

            void showtime();

      protected:

            //保护型成员;

      private:

     int hour,minute,scent;

}

 

 

//类函数的实现

void clock::settime(int newh,int newm,int news)

{

hour=newh;

minute=newm;

scend=news;

}

void clock::showtime()

{

cout<<hour<<":"<<minute<<“:"<<scend<<endl;

 

}

类成员的访问权限:

public定义了类的外部接口,在类外部只能访问类的public成员。

private定义了私有成员,只能被本类的成员函数访问,类外部访问都是非法的

protected定义了保护类型成员,类似于私有成员,差别在于对继承过程中产生的新类的影响不同

类的成员函数

类的成员函数时类的行为,是程序算法的实现部分,是对封装数据的操作方法。

成员函数的声明与实现

函数的原型声明在类中,说明了函数的参数和返回值类型,具体实现是在类之外。与普通函数不同的是,类实现函数需要指明类的名称,形式如下:

返回值类型    类名    ::函数成员名(参数表)

{

函数体

}

另外类的成员函数也可以有默认形参值(即,函数实现的时候形参可以直接赋值)

内联函数:这个先不写

对象:

c++中类的对象就是类的一种实体(实例),如果将类看成是一种自定义类型,那么类的对象就可以看成是该类型的变量,形式如下:

类名   对象名;

定义了类及其对象,j就可以访问对象的公有成员,访问形式采用的是”.“操作符,一般形式是:

对象名.公有成员函数名(参数表)  //注意不要忘记还有参数表哟!

另外还有构造函数和析构函数,构造函数的作用是在对象别处创建的时候,顺便对对象进行初始化,构造函数也是类的一个成员函数,但是构造函数的函数名与类名相同,而且没有返回值,构造函数通常被声明为公有函数,与构造函数类似的还有拷贝构造函数,这个先不写,等到以后学好引用后在写。

关于析构函数,则是对象的一个清除函数,析构函数是类的公有函数,它的名称是类名前加”~“,没有返回值,不接受任何参数,它在对象的生存周期即将结束的时候自动调用。

 

最后贴出个完整的类应用程序

有一个圆形泳池,需要在其周围建议圆形过道,并在其周围为上栅栏,栅栏价格35/米,过道20元/平方米,道宽三米,泳池半径键盘输入,求过道和栅栏造价

 

// example_1_2_class_swimmingpool.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;
const float PI=3.1415926;
const float fenceprice=35;
const float concreteprice=20;

class circle 
{
public:
    circle(float r);//构造函数,用于初始化类值
    float cirsumference();
    float area();

private:
    float radius;

};//注意类的最后有一个分号,跟在花括号之后,不常见
//类的实现
circle::circle(float r){radius=r;}//构造函数的实现

float circle::cirsumference()//计算圆的周长
{
    return 2 * PI * radius;

}
float circle::area()//计算园的面积
{
    return PI*radius*radius;

}

int _tmain(int argc, _TCHAR* argv[])
{
    float radius;
    float fencost,concretecost;
    cout<<"Enter the radius of the pool:";
    cin>>radius;
    circle pool(radius);
    circle poolrim(radius+3);

    fencost=poolrim.cirsumference()*fenceprice;
    cout<<"fencing cost is "<<fencost<<endl;

    concretecost=(poolrim.area()-pool.area())*concreteprice;
    cout<<"concrete  cost is "<<concretecost<<endl;
    system("pause");
    return 0;
}

 

类的组合

       类的组合描述的是一个类内嵌其他类的对象作为成员的情况,它们之间的关系是包含于被包含的关系,当创建类的对象时,如果类具有内嵌对象成员,那么各个内嵌成员对象将首先被自动创建,在创建对象时,既要对本类的基本类型数据成员进行初始化,又要对内嵌对象成员初始化,因此理解这些对象的构造函数的被调用顺序就很重要。

组合类构造函数的定义形式为:

类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),...

{类的初始化}

其中,”内嵌对象1(形参表),内嵌对象2(形参表),...”称作初始化列表,作用是对内嵌对象初始化,另外对基本类型的数据成员也可以这样初始化,而且使用初始化列表比使用赋值语句的效率要高。例如上面的构造函数可以这样写:

circle::circle(float r):radius(r) {}

 

  在创建组合类的对象时,不仅调用它自身的构造函数,还将调用其内嵌对象的构造函数,这时调用顺序是:

首先调内嵌对象的构造函数,调用顺序按照内嵌对象在组合类的定义中出现的次序,然后执行本类构造函数的函数体。

但是析构函数的调用执行顺序与构造函数刚好相反。

 

posted on 2015-07-27 13:58  Jack-su  阅读(2896)  评论(0编辑  收藏  举报