📜  C++中的结构与类(1)

📅  最后修改于: 2023-12-03 14:39:58.889000             🧑  作者: Mango

C++中的结构与类

C++是一门面向对象的编程语言,结构体和类都是其面向对象编程的重要组成部分。本文将探讨在C++中结构体和类的定义、声明、访问权限、继承以及成员函数等方面的知识点。

结构体

结构体是一种用户自定义类型,可以组合不同类型的变量,形成一个新的结构体类型。可以理解为一个包含不同成员变量的变量集合,在C++中结构体的定义如下:

struct 结构体类型名{
    数据类型1 成员变量名1;
    数据类型2 成员变量名2;
    //……
};

例如下面的结构体表示一个三维向量:

struct Vector3{
    float x;
    float y;
    float z;
};

结构体中的成员变量可以像普通变量一样进行访问:

Vector3 vec1;

vec1.x = 1.0f;
vec1.y = 2.0f;
vec1.z = 3.0f;

类是一种用户自定义类型,也可以组合不同类型的变量,形成一个新的类类型。在C++中类和结构体的定义几乎是一样的,只是默认的访问权限不同,结构体默认为public,而类默认为private。在C++中类的定义如下:

class 类名{
private:
    //private成员变量
public:
    //public成员变量
    //成员函数
};

例如下面的类表示一个学生:

class Student{
private:
    int id;//学号
    int age;//年龄
public:
    char name[20];//姓名
    void set_id(int I){//设置学号
        id = I;
    };
    void set_age(int A){//设置年龄
        age = A;
    };
    int get_id(){//获取学号
        return id;
    };
    int get_age(){//获取年龄
        return age;
    };
};

我们可以通过成员函数来设置和获取类的私有成员变量:

Student stu1;

stu1.set_id(1001);
stu1.set_age(18);
strcpy(stu1.name, "Tom");

cout<<"name: "<<stu1.name<<", id: "<<stu1.get_id()<<", age: "<<stu1.get_age()<<endl;
访问权限

在类中,成员变量和成员函数可以被声明为public、private或protected。public成员可以在类的外部访问,private成员只能通过类的成员函数来访问,protected成员只能被类的派生类访问。在类中,默认的访问权限是private。例如:

class MyClass{
public:     //公有
    void myPublicFunction(){
        //...
    }

protected:  //保护
    void myProtectedFunction(){
        //...
    }

private:    //私有
    void myPrivateFunction(){
        //...
    }
};
继承

C++中的继承方式分为public、private和protected,它们的区别在于派生类继承了基类的成员后的访问权限不同。public继承表示基类的public成员在派生类中仍然是public成员,protected继承表示基类的public和protected成员在派生类中均变为protected成员,private继承表示基类的public和protected成员在派生类中均变为private成员。例如:

class Base{
public:
    int a;
protected:
    int b;
private:
    int c;
};

class Derived1 : public Base{
public:
    void myPublicFunction(){
        a = 1;
        b = 2;
        // c = 3;  //不能访问基类的私有成员
    }
};

class Derived2 : protected Base{
public:
    void myPublicFunction(){
        a = 1;
        b = 2;
        // c = 3;  //不能访问基类的私有成员
    }
};

class Derived3 : private Base{
public:
    void myPublicFunction(){
        a = 1;
        b = 2;
        // c = 3;  //不能访问基类的私有成员
    }
};
成员函数

成员函数是类中的函数,它可以访问类内的所有成员,包括公有、保护和私有成员,也可以访问其他对象的成员函数。成员函数定义时需要在函数名前面加上类名,例如:

class MyClass{
public:
    void myFunction(){
        //...
    }
};

成员函数可以像普通函数一样进行调用:

MyClass obj;

obj.myFunction();

此外,成员函数还可以被重载。重载是指在同一个类中定义多个函数,它们的函数名相同但参数类型或数量不同。例如:

class MyClass{
public:
    void myFunction(){
        //...
    }
    void myFunction(int a){
        //...
    }
};

我们可以根据需要选择不同的函数进行调用:

MyClass obj1;

obj1.myFunction();

MyClass obj2;

obj2.myFunction(1);