对象:此对象,非彼对象,:-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. linux命令:exec

    1.命令介绍: exec用来配合find命令找到的文件后接着执行相应的命令 2.命令格式: find . -type f exec ls -l {} \;

  2. 苹果IPhone手机由于更新了IOS7 Beta测试版导致“激活出错”后,如何还原电话本和照片方法

    苹果这狗日的,手段果然狠,因为用户提前升级了测试版又没有更新正式版,就突然把手机变砖头,既不让升级正式版,也不让备份手机中的信息,确实有必要这样吗? 我的手机是IPone4s,在看了6月Apple W ...

  3. C# WinForm 应用程序 开启Console窗口

    /********************************************************************************* * C# WinForm 应用程序 ...

  4. Linux常用命令大全(share)

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  5. 记录以下boost::shared_ptr的一个使用细节

    shared_ptr<T>::operator->返回的是T*类型指针,非const T*指针.因此通过const shared_ptr<T>&类型的ptr可以直 ...

  6. 旅行家的预算 1999年NOIP全国联赛普及组NOIP全国联赛提高组

     时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车 ...

  7. 正确使用List.toArray()(转)

    在程序中,往往得到一个List, 程序要求对应赋值给一个array, 可以这样写程序: for example:   Long [] l = new Long[list.size()]; for(in ...

  8. linux ssh服务器

    默认配置文件在: /etc/ssh/下 有两个需要配置的文件: ssh_config    ssh_client配置文件 sshd_config  ssh服务器的配置文件 两个文件的详细介绍和配置方法 ...

  9. Python学习笔记——Day4

    字符串操作 string典型的内置方法: count() center() startswith() find() format() lower() upper() strip() replace() ...

  10. JS识记

    1.重新按照URL地址加载本页? window.location.reload(); 2.JS中实现命名空间一例? <script type="text/javascript" ...