c++的类与对象
对象:此对象,非彼对象,:-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++的类与对象的更多相关文章
- Java编程里的类和对象
像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...
- Python - 类与对象的方法
类与对象的方法
- C++基础知识(5)---类和对象
终于把C++中的基础在前面的几篇博客中总结完了,可能还有一些语法还没有总结到,没关系,以后用到了再查资料就好.类是C++中的一个非常重要的概念,这是区别你使用的C++到底是面向过程还是面向对象的一个重 ...
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- Objective-C Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- [Java入门笔记] 面向对象编程基础(一):类和对象
什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...
- 解析Java类和对象的初始化过程
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...
- 02OC的类和对象
这章重点介绍OC的类以及对象,由于C语言是面向过程语言,而OC只是对于C语言多了一些面向对象的特性,所以OC相对于其他面向对象语言,例如C#.Java等没有那么多的语法特性,所以差别还是比较大的. 一 ...
- swift基础:第六部分:类与对象
http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...
随机推荐
- UVA 10407 差分思想的运用
就是每两项相减,肯定能被模数整除. #include <iostream> #include <cstring> #include <cstdio> #includ ...
- js事件处理机制
一.事件处理程序 a. DOM0级事件处理程序,被认为是元素的方法. var btn=document.getElementById('myBtn'); btn.onclick=functio ...
- linux shell 使用总结
为什么执行脚本要使用./ +脚本名来执行脚本理解:因为如果直接使用脚本名,那么linux 系统会去path 路径查找如去/bin usr/bin 等查找,这个时候会找不到这个脚本名字,就会报错.使用. ...
- lumen 错误&日志
1.简介 开始一个新的Lumen项目的时候,错误和异常处理已经默认为你配置好了.此外,Lumen还集成了提供各种功能强大日志处理器的Monolog日志库. 2.配置 2.1 错误详情 配置文件.env ...
- Apache Shiro 使用手册(五)Shiro 配置说明
Apache Shiro的配置主要分为四部分: 对象和属性的定义与配置 URL的过滤器配置 静态用户配置 静态角色配置 其中,由于用户.角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包含 ...
- python---list列表
Python 列表(List) 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型 ...
- ADF_Data Binding系列1_使用Bean Data Control
2015-02-16 Created By BaoXinjian
- view坐标_ _ Android应用坐标系统全面详解
转:http://blog.csdn.net/yanbober/article/details/50419117 1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自 ...
- 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 ...
- c#获取枚举
在实际开发项目中,我们定义了一个枚举,往往我们需要在下拉框或其它地方展示枚举.为了加深印象,也为了帮到有需要的人,我写了一个DEMO. 第一步,我们定义一个枚举: /// <summary> ...