类和对象
类和对象
C++面向对象的三大特性为:封装、继承、多态。
C++认为万事万物皆为对象,对象上有其属性和行为
class 类名{访问权限: 属性 / 行为};
class 类名
{
访问属性,private,public,protected 三种访问属性
Person
};
public——公共权限——成员类内可以访问,类外可以访问
protected–保护权限——成员类内可以访问,类外不可以访问
private——私有权限——成员类内可以访问,类外不可以访问
C++程序设计允许程序员使用类(class)定义特定程序中的数据类型。这些数据类型的实例被称为对象,这些实例可以包含程序员定义的成员变量、常量、成员函数,以及重载的运算符。
语法上,类似C中结构体(struct)的扩展,C中结构体不能包含函数以及重载的运算符。
对比:在 C++ 中,结构体 是由关键词 struct 定义的一种数据类型[1]。他的成员和基类默认为公有的(public)。由关键词 class 定义的成员和基类默认为私有的(private)。这是C++中结构体和类仅有的区别。
class box
{
public:
int height, lenth, breadth;
int get_volume()
{
return height * breadth * height;
}
//成员函数可以操作任意的对象,也可以访问对象中的成员,而不是直接访问这些成员变量
};
上面是将函数的主体定义在类的内部,同样函数的主体也可以定义在类的外面,定义的方式如下:
class box{
public:
int a, b, c;
int get_volume();
};
outbox int box::get_volume(){
return a * b * c;
}
当成员函数在类的外部进行定义的时候,在 :: 运算符之前必须是类的名称。在调用类的成员函数的时候,需要使用 . 运算符,和结构体的使用类似,具体操作方式如下
::是范围解析运算符,或者称为域区分符,用来指明一个函数或一个数据属于哪一个类。
::也可以不跟类名,表示全局函数或者全局数据
构造函数和析构函数——对象的初始化和清理
在生活中我们所购买的电子产品大多都有恢复出厂设置,在某一天我们不使用的时候清除自己的数据来保证自己信息的安全。
C++中每个对象也会有初识设置以及对象销毁前的清理数据的设置。是一种特殊的成员函数,它会在每次创建类的新对象时执行。
1.c++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。
2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数是一个没有参数的构造函数,它仅仅负责创建对象而不做任何赋值操作。
3.只要类中提供了任意一个构造函数,那么c++就不在自动提供默认构造函数。
4.类对象的定义和变量的定义类似,使用默认构造函数创建对象的时候,如果创建的是静态或者是全局对象,则对象的位模式全部为0,否则将会是随即的。
C++构造函数的函数名必须和类名相同。
在一个类中的函数分为构造函数、自定义函数;
自定义函数:顾名思义,即可根据一个方法的具体功能取一个有意义的名字。
构造函数:它是用来构造出一个类的对象的,调用类的构造函数即创建这个类的一个实例。所以也就是为什么构造函数名就和类名要相同的缘故了。
Line::Line( double len) : length(len)
{
cout << "Object is being created, length = " << len << endl;
}
//初始化列表的方式 : length(len) 类似的有:m_A(10), m_B(20), m_C(30) 效果等同于 m_A=10
上面的语法等同于如下语法
Line::Line( double len)
{
cout << "Object is being created, length = " << len << endl;
length = len;
}