C++面向对象的三大特性为:封装、继承、多态

C++认为万事万物都皆为对象,对象上有其属性和行为

例如:

人可以作为对象,属性有姓名、年龄、身高、体重.,行为有走、跑、跳、吃饭、唱歌...

车也可以作为对象,属性有轮胎、方向盘、车灯…行为有载人、放音乐、放空调...

具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类

封装

封装的意义:

①将属性和行为作为一个整体,表现生活中的事物

语法:class 类名{ 访问权限:属性/行为 };

类中的属性和行为,我们统称为成员

属性:成员属性 成员变量

行为:成员函数 成员方法

//圆周率
const double PI = 3.14;

//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*半径
//class代表设计一个类,类后面紧跟着的就是类名称
class Circle{
    //访问权限
    //公共权限
public:
    //属性
    //半径
    int m_r;
    //行为
    //获取圆的周长
    double calculateZC(){
        return 2*PI*m_r;
    }
    //给半径赋值
    void set(String name){
        m_name = name;
    }
}

int main(){
    //通过圆类创建具体的圆
    //实例化(通过一个类 创建一个对象的过程)
    Circle c1;
    //给圆对象的属性进行赋值
    c1.m_r = 10;
    c1.set(10);
    cout << "圆的周长为:" <<cl.calculateZC()<<endl;
    
}

②将属性和行为加以权限控制

访问权限有三种:

public 公共权限 类内可以访问 类外可以访问

protected 保护权限 类内可以访问 类外不可以访问

private 私有权限 类内可以访问 类外不可以访问

class Person{
public:
    //公共权限
    string m_Name;
protected:
    //保护权限
    string m_Car;
private:
    //私有权限
    int m_Password;

public:
    void func(){
        m_Name = "张三"
        m_Car = "拖拉机"
        m_Password = 123456;
    }
}

int main(){
    Person p1;

    p1.m_Name = "李四"
    p1.m_Car = "奔驰"//保护权限内容,在类外访问不到
    p1.m_Password = 123;//私有权限内容,类外访问不到
    
}

struct和class的区别

在C++中struct和class唯一的区别就在于默认的访问权限不同

①struct默认权限为公共

②class默认权限为私有

class C1
{
    int m_A;//默认权限,是私有
};

struct C2
{
    int m_A;//默认权限,是公共
};

int main(){
    //在class里默认权限 私有,因此类外不可以访问
    C1 c1:

    //在struct默认的权限为公共,因此可以访问
    C2 c2:
    c2.m_A = 100;
}

成员属性设置为私有

优点:

①将所有成员属性设置为私有,可以自己控制读写权限

②对于写权限,我们可以检测数据的有效性

class Person{
public:
    void setName(string name){
        m_Name = name;
    }
    string getName(){
        return m_Name;
    }

    int getAge(){
        return m_Age;
    }
    //设置年龄(0~150)
    int setAge(int Age){
        if(Age<0 || Age>150 ){
            cout<<"年龄输入有误,赋值失败"<<endl;
            return;
        }
        m_Age = Age;
    }

    void setIdol(string idol){
        m_Idol = idol;
    }

private:
    string m_Name;	//可读可写
    int m_Age = 18;	//只读
    string m_Idol;	//只写

}

int main(){
    Person p;
    p.seyName("张三");
    cout<<"姓名:"<<p.getName()<<endl;

    p.setAge(20);
    p.m_Age = 20;
    cout<<"年龄:"<<p.getAge()<<endl;

    p.setIdol("小明");
    cout<<"偶像:"<<p.setIdol()<<endl;    
    
}

静态成员

静态成员就是在成员变量和成员函数前加上关键字static,成为静态成员变量

静态成员变量分为:

1、静态成员变量

①所有对象共享同一份数据

②在编译阶段分配内存

③类内声明,类外初始化

//类内声明,类外初始化
class Person{
public:
    static int m_A;

//静态成员变量也是有访问权限的
private:
    static int m_B;
};
int Person::m_A = 100;
int Person::m_B = 200;

void test01(){
    Person p;
    cout << p.m_A <<endl;

    Person p2;
    p2.m_A = 200;
    cout <<p.m_A <<endl;
}

//静态成员变量,不属于某个对象上,所有对象都共享同一份数据
//因此静态成员变量有两种访问方式
void test02(){
    //通过对象进行访问
    Person p;
    cout << p.m_A <<endl;

    //通过类名进行访问
    cout <<Person::m_A <<endl;
    //类外访问不到私有静态成员变量
    cout <<Person::m_B <<endl;
}

2、静态成员函数

①所有对象共享同一个函数

②静态成员函数只能访问静态成员变量

class Person{
public:
    static void func(){
        m_A = 100;//静态成员函数可以访问静态成员变量
        m_B = 200;//静态成员函数不可以访问非静态成员变量
        cout << "static void func调用" <<endl;
     }
    static int m_A;
    int m_B;
//静态成员函数也是有访问权限的
private:
    static void func2(){
        cout << "static void func2调用" << endl;
    }
};
int Person::m_A=0;

void test01(){
    //通过对象访问
    Person p;
    p.func;
    //通过类名访问
    Person::func();
    //类外访问不到私有静态成员函数
    Person::func2();
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐