C++OOP对象和类的详细讲解( 二 )
对于类,我们称为公共接口 。在公共接口里,公共(public)是使用类的程序,而接口由程序员提供的调用类方法组成 。例如,想要计算string对象包含多少个字符,我们无需打开对象,只需要使用其提供的size方法 。方法size()便是用户与string类之间的公共接口 。
3.C++中的类和对象C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计 。类是 C++ 的核心特性,通常被称为用户定义的类型 。
类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法 。类中的数据和方法称为类的成员 。函数在一个类中被称为类的成员 。
3.1 C++类的定义定义一个类,本质上是定义一个数据类型的蓝图 。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作 。

文章插图

文章插图

文章插图
下面这个例子能帮助你理解上述概念
#include <iostream> using namespace std; class Box{public:double length;// 长度double breadth;// 宽度double height;// 高度// 成员函数声明double get(void);void set( double len, double bre, double hei );};// 成员函数定义double Box::get(void){return length * breadth * height;} void Box::set( double len, double bre, double hei){length = len;breadth = bre;height = hei;}int main( ){Box Box1;// 声明 Box1,类型为 BoxBox Box2;// 声明 Box2,类型为 BoxBox Box3;// 声明 Box3,类型为 Boxdouble volume = 0.0;// 用于存储体积// box 1 详述Box1.height = 5.0;Box1.length = 6.0;Box1.breadth = 7.0;// box 2 详述Box2.height = 10.0;Box2.length = 12.0;Box2.breadth = 13.0;// box 1 的体积volume = Box1.height * Box1.length * Box1.breadth;cout << "Box1 的体积:" << volume <<endl;// box 2 的体积volume = Box2.height * Box2.length * Box2.breadth;cout << "Box2 的体积:" << volume <<endl;// box 3 详述Box3.set(16.0, 8.0, 12.0);volume = Box3.get();cout << "Box3 的体积:" << volume <<endl;return 0;}
3.4 C++类成员函数类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样 。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员 。
让我们看看之前定义的类 Box,现在我们要使用成员函数来访问类的成员,而不是直接访问这些类的成员:
class Box{public:double length;// 长度double breadth;// 宽度double height;// 高度double getVolume(void);// 返回体积};
成员函数可以定义在类定义内部,或者单独使用范围解析运算符 ::来定义 。在类定义中定义的成员函数把函数声明为内联的,即便没有使用 inline 标识符 。所以您可以按照如下方式定义getVolume()函数:
class Box{public:double length;// 长度double breadth;// 宽度double height;// 高度double getVolume(void){return length * breadth * height;}};
您也可以在类的外部使用范围解析运算符 ::定义该函数,如下所示:
double Box::getVolume(void){return length * breadth * height;}
在这里,需要强调一点,在 :: 运算符之前必须使用类名 。调用成员函数是在对象上使用点运算符(.),这样它就能操作与该对象相关的数据 。
这里需要注意的是,定义在类中的成员函数缺省都是内联的,如果在类定义时就在类内给出函数定义,那当然最好 。如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上inline,否则就认为不是内联的 。例如:
class A{public:void Foo(int x, int y) {} // 自动地成为内联函数}
将成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一种良好的编程风格,上例应该改成:
// 头文件class A{public:void Foo(int x, int y);}// 定义文件inline void A::Foo(int x, int y){}
inline 是一种用于实现的关键字
关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用 。
如下风格的函数Foo不能成为内联函数:
void Foo(int x, int y);inline void Foo(int x, int y) {}// inline 与函数定义体放在一起
而如下风格的函数Foo 则成为内联函数:
void Foo(int x, int y);inline void Foo(int x, int y) {}// inline 与函数定义体放在一起
现在我们来梳理一下上面所说的程序,如下所示
- WPS如何撤销和恢复
- 13妖什么牌
- x和xs外观区别是什么
- 6.21英寸手机和6.5英寸哪个大
- 12:30pm是几点
- 如何制作大枣年糕
- 鸭血和猪血哪个好吃
- 欢乐斗地主怎么和好友一起玩 欢乐斗地主如何邀请和好友一起玩
- dress和skirt区别
- 0.45口径子弹和9毫米子弹哪个威力大
