对象:此对象,非彼对象,:-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=;
const float concreteprice=; class circle
{
public:
circle(float r);//构造函数,用于初始化类值
float cirsumference();
float area(); private:
float radius; };//注意类的最后有一个分号,跟在花括号之后,不常见
//类的实现
circle::circle(float r){radius=r;}//构造函数的实现 float circle::cirsumference()//计算圆的周长
{
return * 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+); 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 ;
}

类的组合

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

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

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

{类的初始化}

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

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

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

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

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

c++的类与对象的更多相关文章

  1. Java编程里的类和对象

    像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...

  2. Python - 类与对象的方法

    类与对象的方法

  3. C++基础知识(5)---类和对象

    终于把C++中的基础在前面的几篇博客中总结完了,可能还有一些语法还没有总结到,没关系,以后用到了再查资料就好.类是C++中的一个非常重要的概念,这是区别你使用的C++到底是面向过程还是面向对象的一个重 ...

  4. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  5. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  6. Objective-C Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  7. [Java入门笔记] 面向对象编程基础(一):类和对象

    什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...

  8. 解析Java类和对象的初始化过程

    类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...

  9. 02OC的类和对象

    这章重点介绍OC的类以及对象,由于C语言是面向过程语言,而OC只是对于C语言多了一些面向对象的特性,所以OC相对于其他面向对象语言,例如C#.Java等没有那么多的语法特性,所以差别还是比较大的. 一 ...

  10. swift基础:第六部分:类与对象

    http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...

随机推荐

  1. UVA 10407 差分思想的运用

    就是每两项相减,肯定能被模数整除. #include <iostream> #include <cstring> #include <cstdio> #includ ...

  2. js事件处理机制

    一.事件处理程序 a.     DOM0级事件处理程序,被认为是元素的方法. var btn=document.getElementById('myBtn'); btn.onclick=functio ...

  3. linux shell 使用总结

    为什么执行脚本要使用./ +脚本名来执行脚本理解:因为如果直接使用脚本名,那么linux 系统会去path 路径查找如去/bin usr/bin 等查找,这个时候会找不到这个脚本名字,就会报错.使用. ...

  4. lumen 错误&日志

    1.简介 开始一个新的Lumen项目的时候,错误和异常处理已经默认为你配置好了.此外,Lumen还集成了提供各种功能强大日志处理器的Monolog日志库. 2.配置 2.1 错误详情 配置文件.env ...

  5. Apache Shiro 使用手册(五)Shiro 配置说明

    Apache Shiro的配置主要分为四部分:  对象和属性的定义与配置 URL的过滤器配置 静态用户配置 静态角色配置 其中,由于用户.角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包含 ...

  6. python---list列表

    Python 列表(List) 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型 ...

  7. ADF_Data Binding系列1_使用Bean Data Control

    2015-02-16 Created By BaoXinjian

  8. view坐标_ _ Android应用坐标系统全面详解

    转:http://blog.csdn.net/yanbober/article/details/50419117 1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自 ...

  9. android studio This client is too old to work with the working copy at

    http://www.cnblogs.com/maijin/archive/2013/01/09/2852330.html http://stackoverflow.com/questions/283 ...

  10. c#获取枚举

    在实际开发项目中,我们定义了一个枚举,往往我们需要在下拉框或其它地方展示枚举.为了加深印象,也为了帮到有需要的人,我写了一个DEMO. 第一步,我们定义一个枚举: /// <summary> ...