C++从结构体到类的使用

目录

结构体(struct)

类(class)

类的访问权限

定义对象和数据成员

实现继承

实现多态

实现封装


结构体(struct)


结构是一种用户自定义的数据类型,它可以包含多个不同类型的成员变量。结构体的定义方式如下:

struct StructName { 

    // 成员变量 

    type1 member1; 

    type2 member2; 

    // ... 

};

结构体可以像普通变量一样使用,例如:

StructName structObj; 

structObj.member1 = value1; 

structObj.member2 = value2;

类(class)


类是一种用户自定义的数据类型,它可以包含成员变量、成员函数、构造函数、析构函数等。类的定义方式如下:


class ClassName { 

public: 

    // 成员函数 

    function1(); 

    function2(); 

    // ... 

private: 

    // 成员变量 

    type1 member1; 

    type2 member2; 

    // ... 

};

类的成员变量和成员函数可以访问私有成员,而类的外部代码不能直接访问私有成员。类的使用方式如下:

ClassName classObj; 

classObj.function1(); 

classObj.function2();

类的访问权限


类的成员变量和成员函数可以有不同的访问权限,包括public、private和protected。public成员可以在类的外部访问,private成员只能在类的内部访问,protected成员可以在类的内部和派生类中访问。

以下是一个简单的使用类的代码示例:

#include <iostream> 

using namespace std; 

 

class Shape { 

public: 

    virtual void draw() { 

        cout << "This is a shape." << endl; 

    } 

}; 

 

class Circle : public Shape { 

public: 

    void draw() { 

        cout << "This is a circle." << endl; 

    } 

}; 

 

class Rectangle : public Shape { 

public: 

    void draw() { 

        cout << "This is a rectangle." << endl; 

    } 

}; 

 

int main() { 

    Shape* shapePtr; 

    Circle circleObj; 

    Rectangle rectangleObj; 

     

    shapePtr = &circleObj; 

    shapePtr->draw(); 

     

    shapePtr = &rectangleObj; 

    shapePtr->draw(); 

     

    return 0; 

}

这个代码示例定义了一个基类Shape和两个派生类Circle和Rectangle。

Shape类有一个公有成员函数draw,它输出一个默认的形状。

Circle类和Rectangle类都继承了Shape类,并重写了draw函数,输出各自的形状。

在main函数中,我们使用一个Shape类型的指针shapePtr来指向不同的派生类对象,并调用它们的draw函数。由于draw函数是虚函数,所以派生类对象的draw函数会被调用,而不是基类对象的draw函数。

C++是一种面向对象的编程语言,类是其中最重要的概念之一。下面是类在C++中的一些使用场景和示例代码:

定义对象和数据成员


class Person { 

private: 

    string name; 

int age; 



public: 

    Person(string n, int a) { 

        name = n; 

        age = a; 

    } 

    string getName() { 

        return name; 

    } 

    int getAge() { 

        return age; 

    } 

};

上面的代码定义了一个名为Person的类,它有两个私有数据成员name和age,以及公共构造函数和访问器函数。

实现继承


#include<iostream>



class Animal { 

public: 

    void eat() { 

        std::cout << "Animal is eating"; 

    } 

}; 

 

class Cat : public Animal { 

public: 

    void meow() { 

        std::cout << "Cat is meowing"; 

    } 

}; 

 

int main() { 

    Cat cat; 

    cat.eat(); // 继承了Animal的eat函数 

    cat.meow(); // Cat自己的meow函数 

    return 0; 

}

上面的代码定义了两个类Animal和Cat,其中Cat从Animal继承。在Cat中,我们可以添加自己的函数meow,同时继承Animal的函数eat。

实现多态


class Shape { 

public: 

    virtual void draw() { 

        cout << "Drawing a shape" << endl; 

    } 

}; 

 

class Circle : public Shape { 

public: 

    void draw() { 

        cout << "Drawing a circle" << endl; 

    } 

}; 

 

class Rectangle : public Shape { 

public: 

    void draw() { 

        cout << "Drawing a rectangle" << endl; 

    } 

}; 

 

int main() { 

    vector<Shape*> shapes; 

    shapes.push_back(new Circle()); 

    shapes.push_back(new Rectangle()); 

    for (int i = 0; i < shapes.size(); i++) { 

        shapes[i]->draw(); // 调用各自的draw函数 

        delete shapes[i]; 

    } 

    return 0; 

}

上面的代码定义了三个类Shape、Circle和Rectangle,其中Shape是一个抽象类,Circle和Rectangle从Shape继承。

在Shape中,我们定义了一个虚函数draw,在Circle和Rectangle中,我们分别实现了自己的draw函数。

在主函数中,我们使用一个vector来存储Shape指针,并分别指向Circle和Rectangle对象。调用draw函数时,由于它是虚函数,C++会自动调用各自的实现。

实现封装


class Person { 

private: 

    string name; 

    int age; 

public: 

    Person(string n, int a) { 

        name = n; 

        age = a; 

    } 

    string getName() { 

        return name; 

    } 

    int getAge() { 

        return age; 

    } 

    void setName(string n) { 

        name = n; 

    } 

    void setAge(int a) { 

        age = a; 

    } 

}; 

 

int main() { 

    Person p("Alice", 25); 

    cout << p.getName() << endl; // 输出Alice 

    p.setName("Bob"); // 修改名字 

    cout << p.getName() << endl; // 输出Bob 

    return 0; 

}

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/131455526