c++类的基础

来源:互联网 发布:知乎 长期单身 编辑:程序博客网 时间:2024/06/08 01:22

//C++类的初探


//作者:张煜




/************************************************************************************************************************
在C语言中,结构体是一个相当重要的课题:
对于逻辑相关的一组数据来说,结构体提供了一个很重要的数据打包方式,它是一种重要的用户自定义数据类型,可视为一种数据模板,
其中定义了各个数据的属性。一旦定义了结构体类型,那么我们就可以定义相应的成员数据,以此来创建共有的数据结构。声明方法和声
明内置类型相同。比如下面的声明:
*************************************************************************************************************************

struct Student:{char name [20];int roll_number ;float total_marks;};


*************************************************************************************************************************
局限性:
1.结构体数据不允许像内置类型那样被操作。
2.无法隐藏数据,在作用域的任何地方,数据成员都是共有的。
*************************************************************************************************************************
那么在C++之中有什么变化呢?
我们来一起看看:
1.C++进一步扩展了c语言中结构体的职能,适应相对于面向对象编程的概念。
2.C++中,结构体成员可以是函数或者是变量,他也可以将其中的某些成员设置为私有成员,这样就不会被外部成员直接访问了。
3.C++中,结构体名称是一个独立的名,可以像任何其他类型名一样被使用。也就是说,在声明结构体变量的时关键词struct可以省略。
//记住这种用法在c语言之中时错误的!
注意:
C++之中类和结构体的唯一区别是:类成员默认都是私有的,而结构体成员默认都是共有的。
*************************************************************************************************************************
定义类:
类是一种捆绑数据和相应函数的方式。如果有必要的话,他可以隐藏数据(和函数),以免被外部访问。
定义类时,我们创造了一个新的抽象数据结构数据类型。
类的声明描述了成员的作用域和类型。而类函数定义则描述了类函数的实现。
定义如下:
*************************************************************************************************************************
   class class_name
   {
    private:
  变量声明;
  函数声明;
   public:
  变量声明;
  函数声明;
   };
*************************************************************************************************************************
与结构体类似,类的定义关键字是class
在类中,私有成员数据只能通过类之中的函数来进行操作,不论他的函数究竟是共有的还是私有的,都可以进行数据访问.
然而,共有的成员数据,在任何定于域部分都可以被访问.这就叫做数据的封装.
*************************************************************************************************************************
简单的一个例子:
class item {int number;float cost;public:void getdata(int a,float b);void putdata(void);};


*************************************************************************************************************************
只要我们定义了了item的对象,那么我们随时可以创建该类的变量,比如:


item x;     //x的内存空间已被分配


我们也可以在一个语句中声明更多的变量:

item x,y,z;

*************************************************************************************************************************
访问类成员:
类的私有成员数据只可由类的成员函数访问.main函数中不可有直接访问number和cost的语句.只能用下面的格式来调用:


object-name,function-name(actual-arguments);


比如:


x.getdata(100,75.5);


即为合法.
通过实现getdata()函数,该语句赋值了100于number,将75.5赋值给cost,都是类对象x的数据成员.
记住:在调用某类的成员函数时,必须使用同类的对象.比如下面的语句:


getdata(100,75.5);


将毫无意义.类似的:


x.number=100;

也是非法的,因为x虽然是item的对象,但是内含的number却是私有的.不能通过外部直接赋值.必须通过类内的函数访问.
声明为公共的变量可由对象直接访问.比如:
*************************************************************************************************************************
class xyz{int x;int y;public:int z};............xyz p;p.x=0;   //错误,x私有.p.z=10;   //正确,z共有.............


注意:这种使用数据的方式违背了隐藏数据的初衷,应该尽量避免.
*************************************************************************************************************************
成员函数的定义:
成员函数可以被在两种地方定义:
>类定义外
>类定义内
很明显,函数的执行任务与定义位置无关,但函数定义略有差别.


>>类定义外<<
类内声明的成员函数必须在类外分开定义.定义与常规函数非常类似.都有两个函数头和一个函数体.

成员函数的定义的一般形式如下:
*****************************************************************
** return-type class-name::function-name(argument declaration)
** {  

**函数体     
** }                                                        
*****************************************************************\
隶属标签class-name::告诉编译器,函数function-name所属的类为class-name.也就是说,
函数的作用于只限于头部的类class-name.符号::称之为作用于解析符.


考虑到上述函数成员函数getdata()和putdata().他们可实现编码如下:

void item::getdata(int a,float b){number = a;cost = b;}void item::putdata(void){cout << "Number:" << number << "\n";cout << "Cost:" << cost << "\n";}




*************************************************************************************************************************

>>类成员内<<
另一个方法,就是将类内的成员函数声明替换成函数定义.


class item{int number;float cost;public:void getdata(int a,float b);         //声明   //内联函数void putdata(void){cout << "Number:" << number << "\n" ;cout << "Cost:" << cost << "\n" ;}};

如需转载请声明原创地址:http://blog.csdn.net/u012485183/article/details/18673227
*/

0 0
原创粉丝点击