C++中的类与面向对象
c++与java类似,也有面向对象的概念,不过语法上个人认为还是有许多差异的。
类的定义:
class Box
{
public:
double length; // 盒子的长度
double breadth; // 盒子的宽度
double height; // 盒子的高度
};
上面的例子我们可以看出来c++与java的差异,比如类定义的末尾要跟一个分号,还有就是成员变量需要声明在像public这样的访问修饰符的后面,然后就是访问修饰符后面要跟一个冒号等等。
疑问:
我在这里有个小疑问,就是关于类的使用,在Java里面当然是先new对象然后再调用类里面的成员变量等等,但是c++里面好像不需要new,直接声明就能访问到成员变量了:
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
int main( )
{
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
double 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;
return 0;
}
上面的例子我们能看到c++里面使用对象的时候好像不需要new,就能访问到成员变量,但是我在Android源码里面看到过new的情况,这个等小弟再研究一波,先不纠结。
成员函数:
成员函数的定义有两种形式,直接看实例:
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
double getVolume(void)
{
return length * breadth * height;
}
};
这是第一种,这种基本跟java语法就是一样的了,不多说,来看第二种
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
// 成员函数声明
double getVolume(void);
};
// 成员函数定义
double Box::getVolume(void)
{
return length * breadth * height;
}
这种就能体现差异了,我们可以看到,在类里面只是声明了函数,而函数实现是在类的外部,还用到了一个符号 :: --作用域限定符,
在类体外实现函数定义的时候,必须加上类名并且加上作用域限定符。android源码里面用的比较多的就是第二种,而且会把类的定义放在h文件中,而函数实现放到cpp文件中。
类访问修饰符:
c++中类的访问修饰符有三种:public、private、protected,作用与java基本一样,注意c++中如果成员变量前面未声明访问修饰符,则默认是private。