文章目录
面向对象
1. 面向对象概述
C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。
1.1 面向对象生活案例
【找合适的人,做合适的事】
假设你正在建造一座房子。在面向对象编程术语中,你可以创建“房子”类,该类包含了所有房子的通用属性和行为。
属性:
颜色:定义房子的外观颜色。
面积:定义房子的总面积。
房间数:定义房子内部的房间数量。
行为:
建造:创建房子并设置属性值。
粉刷:选择一种颜色,并将房子的颜色属性更改为所选颜色。
改变面积:根据需要更改房子的总面积。
添加房间:根据需要增加房子的房间数量。
此时,你可以通过实例化“房子”类来创建具体的房子对象。例如,你可以创建一个红色、面积为100平方米、有三个房间的房子对象。
这个案例中的“房子”类就是一个面向对象编程的示例。它将类作为一个模板,将房子的属性和行为封装在一起。通过实例化该类,我们可以创建多个具有不同属性的房子对象,并通过调用对象的方法来执行相应的行为。这种方式使得代码可重用、易于维护,并且可以根据需要进行扩展。
1.2 类&对象
类是 C++的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,是一种用户自定义的数据类型,它是一种封装了数据和函数的组合。类中的数据称为成员变量,函数称为成员函数。类可以被看作时一种模板,可以用来创建具有相同属性和行为的多个对象。
类 | 对象 |
---|---|
人 | 任正非、雷布斯、乔布斯 |
猫 | 黑猫警长、Tom 猫 |
狗 | 神犬小七、哮天犬、糯米 |
2. C++ 中的面向对象
2.1 C++ 定义类的格式
【权限修饰符】三个关键词
权限修饰符 | 类内 | 子类 | 类外 |
---|---|---|---|
public[公开] | √ | √ | √ |
protected[受保护] | √ | √ | × |
private[私有] | √ | × | × |
C++ 定义类的格式
class 类名
{
成员变量; ==> 属性描述
成员函数; ==> 行为描述
构造函数和析构函数; ==> 【小重点】
}
2.2 C++ 类定义和创建对象案例
#include <iostream>
using namespace std;
class Person
{
// public 关键字,表示以下内容都是 public 修饰,类内、类外、子类都可以使用
public:
// 成员变量,对应的【属性描述】
int id;
char * name;
int age;
void eat(string food)
{
cout << "今天中午吃" << food << endl;
}
void sleep()
{
// 成员变量一般情况,可以直接在类内的成员函数使用
cout << name << "被床封印了" << endl;
}
void coding()
{
cout << "打代码" << endl;
}
};
int main(int argc, char const *argv[])
{
// 第一种用法,定义 类变量
Person p;
p.id = 1;
p.name = "James";
p.age = 15;
cout << "ID : " << p.id << endl;
cout << "Name : " << p.name << endl;
cout << "Age : " << p.age << endl;
p.eat("混沌");
p.sleep();
p.coding();
cout << "------------------------------" << endl;
// 第二种用法 new 对象/实例化对象
Person *p1 = new Person;
p1->id = 1;
p1->name = "Mary";
p1->age = 32;
cout << "ID : " << p1->id << endl;
cout << "Name : " << p1->name << endl;
cout << "Age : " << p1->age << endl;
p1->eat("番茄炒蛋");
p1->sleep();
p1->coding();
delete p1;
return 0;
}
2.3 权限修饰符案例【public protected private】
#include <iostream>
using namespace std;
class Person
{
public:
string nickName;
void eat()
{
cout << nickName << "在切藕" << endl;
}
protected:
string name;
void sleep()
{
cout << nickName << "在切藕" << endl;
cout << name << "快睡着了" << endl;
}
private:
int age;
void test()
{
cout << "private 修饰的私有化函数" << age << nickName << name << endl;
}
};
int main(int argc, char const *argv[])
{
Person * p = new Person;
p->nickName = "Jerry";
p->eat();
/*
成员 "Person::name" (已声明 所在行数:14) 不可访问
函数 "Person::sleep" (已声明 所在行数:15) 不可访问
name 成员变量和 sleep 成员函数 是 protected 修饰,类外无法使用
*/
// p->name = "Marry";
// p->sleep();
/*
成员 "Person::age" (已声明 所在行数:21) 不可访问
函数 "Person::test" (已声明 所在行数:22) 不可访问
age 成员变量和 test 成员函数都是 private 修饰,类外无法使用
*/
// p->age = 16;
// p->test();
delete p;
return 0;
}