//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
*/