c++的面向对象基础 Day 2
2017-02-16 09:56
239 查看
概述
c++不仅扩充了c面向过程的功能,而且增加了面向对象的功能,这就是c++成为能适应面向对象程序设计的现代大语言。 从计算机的角度,一个对象应该包括两个要素:一是数据,二是需要进行的操作。传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任意一组数据,而一组数据又能被多个函数所使用。面向对象程序设计采用新的思路,它面对的是一个个对象,所有的数据分别属于不同的对象。 面向对象的程序设计方法的一个重要的特点就是封装性,把数据和操作代码封装在一个对象中。程序设计者的任务包括两个方面:一是设计对象,即决定把哪些数据和操作代码封装在一个对象中,二是在此基础上怎样通知有关对象完成所需的任务。
类和对象
对象的类型为类,类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例。
class stud { int num; char name[10]; char sex; void display() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } }; stud stud1,stud2;
这就声明了一个名为 stud的类。可以看到声明类的方法是由声明结构体类型的方法发展而来的。它除了包含数据部分以外,还包括了对这些数据的操作部分,也就是把数据和操作封装在一起。display是一个函数,用来输出本对象中学生的学号、姓名和性别。类除了具有封装性外,还采用了信息隐蔽原则,使类的成员与外界的联系减少到最低程度。但是还是需要有外界的接口,一般是把数据隐藏起来,而把成员函数作为对外界的接口。接着,就有了类的成员包括两大类:一类是私有的;一类是公有的,还有一类是受保护的。
class stud { private: int num; char name[10]; char sex; public: void display() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } }; stud stud1,stud2;
现在声明了display函数是公用的,外界就可以调用该函数了。
介绍在面向对象程序设计中的几个名词,类中的成员函数称为方法,方法是对数据的操作,一个方法对应一种操作。显然只有被声明为public的方法(成员函数)才能被对象外界所激活。外界是通过发消息来激活有关方法的。所谓消息,其实就是一个命令,由程序语句来实现的。例如想输出对象stud1中的学生学号、姓名、性别等信息,可以在程序中写
stud1.display();
这就是向对象发出的一个消息,通知它执行display方法。
三个概念:对象 、方法、消息。
归纳以上对类型的声明,可以得到其一般形式:
class 类名
{private:
私有的数据和成员函数;
public:
公用的数据和成员函数;
};
构造函数和析构函数
1、构造函数在建立一个对象时,常常需要作某些初始化的工作(例如对数据赋予初值),C++提供了一种特殊的成员函数–构造函数(constructor),这种函数与其他成员不同,不需要用户发消息来激活它,而是在建立对象时自动执行,构造函数是由用户定义的,它必须与类名同名,以便系统能识别它并把它作为构造函数。现在我们在前面声明的类中加入构造函数。
class stud //声明一个类,以class开头 {private: //私有的数据和成员函数 int num; char name[10]; char sex; //以上三行是数据成员 public: //公用的数据和成员函数 stud() //定义构造函数,函数名与类名相同 {num=10010' strcpy(name,"Wang_li"); sex='F';} //给数据赋初值 void display() //这是成员函数 {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;} }; stud stud1; //在定义对象stud1时自动执行构造函数;
==注意:构造函数不需要用户调用,而是在定义一个对象时系统自动执行,而且只能执行一次。构造函数一般声明为public,无返回值,也不需要加void类型声明。
#include<string.h> #include<iostream.h> void main() { class stud { private: int num; char name[10]; char sex; public: stud() {num=10010; strcpy(name,"Wang_li"); sex='F';} void display() {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;} }; stud stud1; stud1.display(); //cout<<stud1.num; }
如果要建立两个对象,分别对数据赋予初值,就不能这样定义构造函数stud了,因为它会使两个学生的初值相同,例如姓名都是Wangli。应该分别赋予不同的初值,可将构造函数修改如下:
stud(int n,char nam[],char s) {num=n; strcpy(name,nam); sex=s; }
完整程序即为
hljs cpp">#include<iostream.h> void main() { class stud { private: int num; char name[10]; char sex; public: stud(int n,char nam[],char s)//定义构造函数,有形参 {num=n; strcpy(name,nam); sex=s; } void display() {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;} }; stud stud1(10010,"Wang_li",'f'),stud2(10011,"Zhang_fen",'m'); stud1.display(); stud2.display(); //cout<<stud1.num; }
用户也可以不定义构造函数,编译系统会自动生成一个构造函数,该函数没有参数,不进行任何操作。
构造函数也可以重载,下面是两个重载函数:
stud()//定义构造函数,无形参 {num=10010; strcpy(name,"Wang_li"); sex='f'; } stud(int n,char nam[],char s)//定义构造函数,有形参 {num=n; strcpy(name,nam); sex=s; }
相关文章推荐
- c++面向对象基础知识 Day 3
- C++之面向对象学习基础一
- 面向对象基础(C++) 二
- 《面向对象基础:C++实现》学习笔记之七
- 《面向对象基础:C++实现》学习笔记之六
- [转]c++面向对象基础
- C++面向对象基础知识详解二
- C++面向对象基础二
- c++面向对象基础
- C++面向对象基础知识详解一
- 嵌入式开发之C++基础学习笔记3--面向对象基础
- C++学习笔记5:从方法到属性(面向对象基础)
- DAY-1 java基础-java面向对象
- C++基础---面向对象建模方法
- 面向对象基础(C++) 一
- c++基础学习6-c++面向对象基本概念
- 【C++面向对象学习笔记】-基础知识
- 《面向对象基础:C++实现》学习笔记之一
- C++基础---面向对象
- C++ 面向对象基础知识点