面向对象的三大特性(不限C++、Python、C#):封装、继承、多态。
面向对象的理念:万物皆对象。一切皆对象。
人可以作为对象,属性有姓名、年龄、身高、体重...,行为有走、跑、跳、吃饭、唱歌...
车也可以作为对象,属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...
具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类。
封装的意义:
- 将属性和行为作为一个整体,表现生活中的一类事物。计算机语言的一种抽象描述。
- 将属性和行为加以权限控制。
C++类语法:
class 类名 { 访问权限: 属性; 访问权限: 行为; };
//访问权限:三种权限
//公共权限 public 类内可以访问 类外可以访问
//保护权限 protected 类内可以访问 类外不可以访问(子类可继承)
//私有权限 private 类内可以访问 类外不可以访问
class Person {
public:
//姓名设置可读可写
void setName(string name) {
m_Name = name;
}
string getName()
{
return m_Name;
}
//获取年龄
int getAge() {
return m_Age;
}
//设置年龄
void setAge(int age) {
if (age < 0 || age > 150) {
cout << "你个老妖精!" << endl;
return;
}
m_Age = age;
}
//情人设置为只写
void setLover(string lover) {
m_Lover = lover;
}
private:
string m_Name; //可读可写 姓名
int m_Age; //只读 年龄
string m_Lover; //只写 情人
};
int main() {
Person p;
//姓名设置
p.setName("张三");
cout << "姓名: " << p.getName() << endl;
//年龄设置
p.setAge(50);
cout << "年龄: " << p.getAge() << endl;
//情人设置
p.setLover("苍井");
//cout << "情人: " << p.m_Lover << endl; //只写属性,不可以读取
system("pause");
return 0;
}
在C++中 struct和class唯一的区别就在于 默认的访问权限不同。
struct 默认权限为公共。
class 默认权限为私有。
分文件
为了方便管理,解决多个类在一个文件中,文件过大问题等问题。类分别写入不同的文件中:
在头文件中建立类的声明文件。其中只包含声明。在源文件中实现所有的声明。具体例子如下:
头文件如下:
#pragma once
#include<iostream>
using namespace std;
#include "Point.h"
class Circle
{
private:
Point center;
int R;
public:
void setCenter(Point point);
Point getCenter();
void setR(int r);
int getR();
};
头文件中写明类名,属性和行为。行为写为声明类型。
如果用到其他类,则把其它类的头文件引入,比如Point.h。
源文件中实现:
#include "Circle.h"
#include "Point.h"
void Circle::setCenter(Point point) // 双冒号用于标明作用域。
{
center = point;
}
Point Circle::getCenter()
{
return center;
}
void Circle::setR(int r)
{
R = r;
}
int Circle::getR()
{
return R;
}
双冒号:声明作用域。源文件中全是对声明的实现。即:全是方法/函数。