了解C++类和对象
来源:互联网 发布:华资软件招聘 编辑:程序博客网 时间:2024/05/22 04:39
1.对象的概念:
所谓的”对象”是指现实世界中的一切事物。c++中说,“万物皆对象”。
2.类的概念:
“类”是用户自定义的数据类型,可以理解为c语言中结构体中的延伸和扩展。它拥有着自己的特征属性,被称为,“数据成员”,还有行为特征,被称为,“成员函数”。而我们熟悉的结构体中,只包括数据成员,实际在其中写成员函数,也不会报错的。
3.类和对象的关系:
在现实生活中,自行车,摩托车等都拥有着一些相似的属性和行为特征,我们可以把这些对象抽象封装成类。类是对象的抽象,对象是类的实例化。
4.类的声明和定义:
在定义结构体时我们用的关键字是,struct,而C++在定义类时有了新的关键字class。
其定义语法是,class+类名+
{
修饰词:
数据成员;
成员函数;
};(注意别忘了分号)
如,我们定义一个点类:
class Point{public:Point(){ cout << "没有参数的构造函数被调用了" << endl; x = 1; y = 2;}Point(int m, int n){ cout << "有两个参数的构造函数被调用了" << endl; x = m; y = n;}void display(){cout << "-----------------**************--------------";cout<< endl;cout << "点的坐标是" << "(" << x << ", " << y << ")" ;cout<< endl;cout << "-------------------**************--------------"; cout<< endl;}~Point(){cout << "析构函数被调用了" << endl;}private:int x;//点的横坐标int y;//点的纵坐标坐标};
在写代码时我们可以把成员函数在声明中便写出来,但是这样不便于阅读,也不美观,我们可以把声明和定义分开:
class Point{public:Point();Point(int m, int n);void display();~Point();private:int x;//点的横坐标int y;//点的纵坐标坐标};Point::Point(){cout << "没有参数的构造函数被调用了" << endl;x = 1;y = 2;}Point::Point(int m, int n){ cout << "有两个参数的构造函数被调用了" << endl; x = m; y = n;}void Point::display(){cout << "-----------------**************--------------";cout<< endl;cout << "点的坐标是" << "(" << x << ", " << y << ")" ;cout<< endl;cout << "-------------------**************--------------"; cout<< endl;}Point::~Point(){cout << "析构函数被调用了" << endl;}
在类外定义成员函数时要声明函数的作用域,用作用域限定符“::”双冒号。
我们定义了一个点类,class是创建类时的关键字,Point是类名,类名只要命名合法即可。public和private是数据成员或者成员函数的访问权限,下面会具体介绍。
5.数据成员或者成员函数的访问权限:
如上面的点类,类里有两个关键字,是public和private,这些就是声明数据成员和成员函数访问权限的关键字。
这些修饰词有三个,public,protected,private。
public是公有的,在类内或者类外均可以被访问的。
protected是受保护的,在类内和继承(先不用了解此概念)该类的类中可以被访问。
private是私有的,只能在类内被访问。
6.构造函数和析构函数:
构造函数:
构造函数是在创建对象时自动被调用的,不用自己去写,便会自己调用,当用类定义一个对象时便会自动执行,是隐式执行的。构造函数没有返回值,当然就没有返回类型,可以有参数也可以没有,没有参数的叫做默认构造函数,而多个构造函数就完成了对构造函数的重载,在定义对象时,会按照传来参数的不同,调用不同的构造函数。
构造函数与类名相同,如上面我定义的点类,Point()就是没有参数的构造函数,即默认构造函数,Point(int m,int n);就是有两个参数的构造函数。
构造函数的功能是给对象中的成员初始化。
构造函数有两种方式写
1.普通方式
请看上面点类中函数的定义实例。
2.初始化表的格式
如上面那个点类有两个参数的构造函数可以如此写:
前面一样,不同的是,赋值时,在函数名整体后+冒号+赋值变量1(值1)+赋值变量2(值2)+…
Point::Point(int m, int n):x(m),y(n){ cout << "有两个参数的构造函数被调用了" << endl;}
析构函数:
析构函数的声明格式是,~类名();波浪线+类名+英语半角的小括号。
析构函数没有参数,没有返回值,也不能重载。
析构函数完成的功能是对对象的销毁,以免内存一直被占用。当该对象到达生存周期时便会被销毁。
如上面的点类~Point()便是析构函数,因为我没有动态申请空间,所以没有必要写delete 动态申请的内存。
如果在程序中我们并没有写构造函数和析构函数,系统会自动帮我们生成。
在实际编写代码时我们没有必要写构造函数和构造函数中的文字,此处是为了读者能够看到是隐式调用而写的。
7.对象访问成员
对象在访问成员时,可以用对象加.(点)即成员访问符号,也可以使用引用,指针方式可以使用指针访问符号。
主函数中有如下代码:
Point a;//隐式调用默认构造函数 Point b(1, 3);//隐式调用有两个参数的构造函数 Point &c = a;//引用 Point *ptr = &b;//指针ptr指向b a.display();//成员访问符访问成员函数 cout << endl; b.display();//成员访问符访问成员函数 c.display();//成员访问符访问成员函数 ptr->display();//指针访问符访问成员函数
运行结果如下:
通过此图可以看出构造函数和析构函数是隐式调用的。
也可以看到成员运算符(访问符)和指针访问符的功能。
- 了解C++类和对象
- 了解JavaScript的类和对象
- c++---类和对象
- C++:类和对象
- 类和对象(C++)
- 【c++】类和对象
- C++:类和对象
- C++:类和对象
- 【C++】类和对象
- RE:JAVA学习-了解对象和类+数组
- 深入了解Objective-C 和 Core Foundation 对象相互转换(_bridge)
- [类和对象]-C#OOP
- Objective-C:类和对象
- Objective-C 类和对象
- Objective-C类和对象
- Objective-C-类和对象
- Objective-C类和对象
- Objective-C 类和对象
- 06-图2 Saving James Bond
- 如何用VOSviewer分析CNKI数据?
- 四线直流风扇PWM调速探研
- 如何高效学Python?
- Centos7.2 eclipse使用CGAL求主骨架
- 了解C++类和对象
- 期末考试 编程题#1:输出200(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)
- springmvc第一讲:学习大纲
- Leetcode 212. Word Search II
- 数字图像处理知识体系
- java中交换两个Integer类型的数据
- 杨辉三角
- 横竖屏切换探讨
- JVM内存区域(一)