【C++面向对象学习笔记】-基础知识

来源:互联网 发布:迅雷看看优化版 编辑:程序博客网 时间:2024/06/02 02:49

1.基本概念

面向对象程序设计是利用对象来进行程序设计。一个对象表示现实世界中一个独一无二的实体。例如,一名学生、一张桌子、一个圆等都可以看作对象。一个对象具有唯一的身份、状态和行为。一个对象的状态用数据域以及它们的当前值来表示。一个对象的行为由一组函数定义,对一个对象调用一个函数就是请求对象执行一个任务。

相同类型的对象用一个通用的类来定义。一个类是一个模板或者一个蓝图,它定义了对象具有什么样的数据和函数。一个对象就是类的一个实例,我们可以创建一个类的多个对象。创建一个实例称为实例化。新创建的对象保存在一块内存区域中,当对象创建后,我们可以使用点运算符( . ),也就是所谓的对象成员访问运算符,来访问对象的数据,调用对象的函数。下面是一个例子:

class Circle{public:double radius;Circle();{radius=1;}Circle(double newRadius){radius=newRadius;}double getArea(){return radius*radius*3.14159;}};int main(){Circle circle1;Circle circle2(5.0);cout<<”The area of the circle of radius”<<circle1.radius<<”is”<<circle1.getArea()<<endl;cout<<”The area of the circle of radius”<<circle2.radius<<”is”<<circle2.getArea()<<endl;circle2.radius=100;cout<<”The area of the circle of radius”<<circle2.radius<<”is”<<circle2.getArea()<<endl;return 0;}

程序输出的结果如下:

The area of the circle of radius 1 is 3.14159

The area of the circle of radius 5 is 78.5397

The area of the circle of radius 100 is 31415.9

注意点:

1)在类定义末尾一定要有一个分号(;)unionstruct也是如此。

2)一个类成员,数据域是不能在声明时进行初始化的,可以在构造函数中为其赋值。

2.声明和实现分离

C++允许将类的声明和实现分离。类声明描述了类的约定,而类实现则实现了这一约定。类声明简单地列出所有数据域、构造函数原型和函数原型,类实现给出构造函数和成员函数的实现,两者置于两个分离的文件中。两个文件应该使用相同的名字,但具有不同的扩展名。类声明文件的扩展名为.h,类实现扩展名为.cpp。现将上面的例子进行声明和实现的分离。

程序清单 Circle.h

class Circle{public:double radius;Circle();Circle(double newRadius);double getArea();};

程序清单Circle.cpp

#include “Circle.h”Circle::Circle(){radius=1;}Circle::Circle(double newRadius){radius=newRadius;}double Circle::getArea(){return radius*radius*3.14159;}

注意点:

1)每个构造函数和函数之前的Circle::是必须的,它告知编译器这些函数是定义于Circle类中的。在C++中,符号::称为二元作用域解析运算符。

2)如果一个函数是在类声明内实现的,那么它就自动地成为一个内联函数。还有另外一种方法将类成员函数声明为内联的,在类实现文件中用inline指明成员函数是内联函数。

3.对象指针与对象数组

1)对象指针

对象名一旦声明后,就无法修改。但是,我们可以创建对象指针,只要需要,任何时候都可以将对象地址赋予指针。例如:

Circle circle1;

Circle *pCircle=&circle1;

通过指针访问对象成员,有以下两种办法。第一种,对指针解引用,然后使用点运算符( . )访问对象成员。第二种,C++提供了一种简写的成员选择运算符,箭头运算符(->)。下面是分别用以上两种方法实现指针访问对象成员的例子:

cout<<”The radius is “<<(*pCircle).radius<<endl;

cout<<”The area is”<<pCircle->getArea()<<endl;

2)对象数组

我们可以创建元素为基本数据类型的数组,同样,我们也可以创建对象数组。例如:

Circle circleArray[10];

这条语句会调用无实参构造函数来初始化数组中的元素。

注意:在声明对象指针时,只是声明了一个指向对象的指针,并不会调用构造函数;而在声明对象数组时,会先调用构造函数来初始化对象元素。

4.变量作用域

在类中,只能为一个数据域声明一个成员变量,但一个变量名可用在多个不同的函数中声明多个局部变量。局部变量在函数内声明,只能在函数内局部使用。如果(成员函数中)一个局部变量与一个数据域具有相同的名字,数据域将被屏蔽,因为局部变量的优先级更高。





0 0