目录
结构体(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; 
} 
 










