面向对象
概念
一切皆对象,一个程序就是一组对象组成的整体,程序的功能由对象之间相互传递消息来实现的。
C++中对象都有类型,同一种类型的对象具有相同的属性和功能。
如何描述对象
抽取描述对象的感兴趣的共同特征
对象的共同特征由属性和功能组成
使用变量描述共同的属性
使用函数描述共同的功能
如何在C++中描述对象的类型
使用结构体(struct)描述
C++对结构体的语法进行了扩展,结构体中不但可以有成员变量,也可以有成员函数。因此结构体可以用来描述对象的类型,在C++中,对象的类型叫类。
使用类(class)描述对象的类型
class也可以用来描述对象的类型,语法和struct几乎一致类中的成员具有访问属性,访问属性分为三类:
访问属性
public — 公有属性 可以在类外和类内访问该成员
protected — 保护属性 可以在类内部和子类中访问该成员
private — 私有属性 只能在类内部访问
类成员的访问属性就是实现封装的基础,封装意思就是私有的数据隐藏,对外的接口公开。struct中的成员的默认访问属性是公开的,class中的成员的默认访问属性是私有的。
在实际开发中,应该显示指定成员的访问属性:
class 类名{
public:
公有成员;
protected:
保护成员;
private:
私有成员
};
一个类中同个访问属性可以多次出现
通常把公开的成员写在类的最前面,私有成员写在类的最后
注意:
一般来说,成员变量总是设置为私有属性,如果类外需要访问就提供公开的接口成员函数。
在C++不推荐使用struct,而应该使用class
练习:
设计一个Animal的类,包含name(char [20]),age(int)的私有成员,weight(float)的保护成员,提供show(打印信息),设置name,设置age的对外接口(公开)。
/*08-构造Animal类*/
#include <iostream>
#include <cstring>
using namespace std;
class Animal {
public:
void show() {
cout << name << ":" << age << ":" << weight << endl;
}
//设置name
void set_name(const char *s) {
strcpy(name, s);
}
//设置age
void set_age(int a) {
age = a;
}
//设置体重
void set_weight(float w) {
weight = w;
}
protected:
float weight;
private:
int age;
char name[20];
};
int main() {
Animal an;//调用无参构造函数
an.set_name("小飞飞");
an.set_age(4);
an.set_weight(14.4f);
an.show();
return 0;
}