赞
踩
一、类的介绍
类是用户自定义的类型,并且该类型具有一定的行为能力(类中说的描述方法)。通常来说,一个类中包含两部分的内容,一是该类的属性,另一部分是它所拥有的方法。比如说“人”这个类,具有姓名,性别,年龄等属性;此外,人能够吃饭,睡觉,行走等行为称为方法。
1.类的声明:即类的成员函数声明,以成员函数的方式被称为公有接口
接口:一个共享的框架,主要由我们写的方法提供
二、类的定义
class是C++中新增的关键字,专门用于定义类。
- class 类名
- {
- public:
- //公共的行为或属性
-
- protected:
- //保护的行为或属性
-
- private:
- //私有的行为或属性
- };
在类内部定义函数体
class 类名
{
返回类型 函数名(形参列表){
函数体
}
};
在类外部定义函数体
class 类名{
返回类型 函数名(形参列表);
};
返回类型 类名::函数名(形参列表){
函数体
};
这两种定义方法看起来没什么区别,其实它们还是有区别的,类内部定义的函数,程序在要调用它的时候会把它当成一个内联函数,内联函数调用速度更快。但是会占用额外的内存空间,每调用一次相当于定义一次。而外部定义的函数,不会被当做内联函数,类似与递归函数等,定义为内联函数肯定不合理的。所以建议用外部定义函数体。
类的定义一般放在程序文件开头,或者放到头文件中被程序文件包含。也可以放在局部作用域中。在C++规定中,在局部作用域中声明类,成员函数必须是函数定义形式,不能原型声明。
类相当于一种新数据类型,数据类型不占用存储空间,用类定义实体时候,才会为它分配空间。
说明:
①类名 需要遵循一般的命名规则;
②类定义结束的分号不能省略;
③public、protected和private为属性、方法限制的关键字,private表示该部分内容是simi私密,不能被外部所访问或调用,只能被类内部方法进行访问,protected表示受保护成员,可以被继承,并被派生类对象进行访问。不能被(类外)访问;public表示公开的属性和方法,外界可以直接访问或者直接调用。
类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。
- class People{
- private:
- char *name;
- int age;
- char *sex;
- public:
- void Print(){
- cout<<"姓名"<<name<<"性别"<<sex<<"年龄"<<age;
- }
- };
三、类的实现
在上面的定义示例中我们只是定义了这个类的一些属性和方法声明, 并没有去实现它, 类的实现就是完成其方法的过程。类的实现有两种方式, 一种是在类定义时完成对成员函数的定义, 另一种是在类定义的外部进行完成。
1.类定义是定义成员函数
- #include <iostream>
- using namespace std;
- class Point{
- public:
- void setPoint(int x,int y) //实现setPoint函数
- {
- xPos=x;
- yPos=y;
- }
- void printPoint(){ //实现printPoint函数
- cout<<"x="<<xPos<<endl;
- cout<<"y="<<yPos<<endl;
- }
- private:
- int xPos;
- int yPos;
- }
- int main(){
- Point M; //用定义好的类创建一个对象 点M
- M.setPoint(10,20); //设置M点的x,y值
- M.printPoint(); //输出M点的信息
- return 0;
- }

x=10
y=20
与类的定义相比,在类内实现成员函数不再是在类内进行声明,而是直接将函数直接定义,在类中定义成员函数时,编译器默认将其定义为inline函数
2.在类外定义成员函数
在类外定义成员函数通过在类内进行声明, 然后在类外通过作用域操作符 :: 进行实现
- 返回类型 类名::成员函数名(参数列表)
- {
- //函数体
- }
-
-
-
- #include <iostream>
-
- using namespace std;
-
- class Point
-
- {
-
- public:
-
- void setPoint(int x, int y); //在类内对成员函数进行声明
-
- void printPoint();
-
-
- private:
-
- int xPos;
-
- int yPos;
-
- };
-
- void Point::setPoint(int x, int y) //通过作用域操作符 '::' 实现setPoint函数
-
- {
-
- xPos = x;
-
- yPos = y;
-
- }
-
- void Point::printPoint() //实现printPoint函数
-
- {
-
- cout<< "x = " << xPos << endl;
-
- cout<< "y = " << yPos << endl;
-
- }
-
- int main()
-
- {
-
- Point M; //用定义好的类创建一个对象 点M
-
- M.setPoint(10, 20); //设置 M点 的x,y值
-
- M.printPoint(); //输出 M点 的信息
-
- return 0;
-
- }

setPoint 成员函数来说, 在类内声明的形式为 void setPoint(int x, int y); 那么在类外对其定义时函数头就应该是 void Point::setPoint(int x, int y) 这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。、
我们之前说过,定义类型时不会分配存储空间,当定义一个对象的时候,将为其分配存储空间。
当然,有时候人们也希望可以动态的为其分配内存,当不用的时候再销毁它,就有了如下定义方式:
Point *p;
p=new Point;
当不再使用此动态对象的时候,必须用delete:
delete p;
访问对象中的成员有三种方法:
通过对象名和对象成员引用运算符 (.)
通过指向对象的指针和指针成员引用运算符 (->)
通过对象的引用变量和对象成员引用运算符 (.)
- Point P;
- P.printPoint();
-
- Point *p;
- p=new Point;
- p->printPoint();
-
- Point p;
- &P=p;
- P.printPoint();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。