一、类及其概念
在面向对象编程中,类是一个非常重要的概念。简单来说,类就是一组相关数据和方法的封装,可以看作是一个对象的模板。在C中,通过定义类并创建对象,可以实现封装数据和方法的目的。一个类的具体实例被称为对象。通过对象,可以访问到类中封装的数据和方法。
类可以看作一种自定义的数据类型。在C中,可以通过class
关键字定义一个类,如下所示:
class MyClass {
private:
int x;
public:
void setX(int num) {
x = num;
}
int getX() {
return x;
}
};
该代码定义了一个名为MyClass
的类,其中包含一个私有成员变量x
和两个公有成员函数setX()
和getX()
。私有成员变量只能在类内被访问,公有成员函数可以在类的外部被访问。
二、封装性
类的封装性是面向对象编程中一个非常重要的概念。封装就是将类的数据和方法进行保护,不允许外部直接访问或修改。在C++中,可以使用private
关键字来定义私有成员变量和私有成员函数,以实现封装。
下面是一个简单的例子:
class Person {
private:
string name;
public:
void setName(string n) {
name = n;
}
string getName() {
return name;
}
};
int main() {
Person p;
p.setName("Alice");
cout << "Name: " << p.getName() << endl;
return 0;
}
在上面的代码中,name
是一个私有成员变量,只能通过公有成员函数setName()
和getName()
进行访问。在main
函数中,通过对象p
来访问和修改name
成员变量,但是不能直接访问name
成员变量。
三、继承
继承是一种面向对象编程中的重要特性,可以实现类之间的关系。在C++中,可以用子类派生出新的类,从而实现继承。继承的目的是通过复用已有的类,减少代码的重复性。在继承中,父类也称为基类或超类,子类也称为派生类。 下面是一个简单的例子:
class Animal {
public:
void eat() {
cout << "Animal eats." << endl;
}
void sleep() {
cout << "Animal sleeps." << endl;
}
};
class Dog : public Animal {
public:
void bark() {
cout << "Dog barks." << endl;
}
};
int main() {
Dog d;
d.eat();
d.sleep();
d.bark();
return 0;
}
在上面的代码中,Animal
类是父类,Dog
类是子类。在Dog
类中,使用public
关键字继承了Animal
类的所有公有成员。在main
函数中,通过子类对象d
访问了父类的成员函数eat()
和sleep()
。同时,还可以调用子类的成员函数bark()
。
四、多态
多态是面向对象编程中的另一个重要特性,可以实现对不同对象的统一操作。多态分为静态多态和动态多态两种。静态多态是通过函数重载和运算符重载来实现的,而动态多态则是通过虚函数来实现的。在C++中,虚函数使用关键字virtual
来进行声明。
下面是一个简单的例子:
class Shape {
protected:
int width, height;
public:
Shape(int w = 0, int h = 0) {
width = w;
height = h;
}
virtual int area() {
cout << "Parent class area." << endl;
return 0;
}
};
class Rectangle : public Shape {
public:
Rectangle(int w = 0, int h = 0) : Shape(w, h) { }
int area() {
cout << "Rectangle class area." << endl;
return (width * height);
}
};
class Triangle : public Shape {
public:
Triangle(int w = 0, int h = 0) : Shape(w, h) { }
int area() {
cout << "Triangle class area." << endl;
return (width * height / 2);
}
};
int main() {
Shape *shape;
Rectangle rec(10, 7);
Triangle tri(10, 5);
shape = &rec;
shape->area();
shape = &tri;
shape->area();
return 0;
}
在上面的代码中,Shape
类是基类,Rectangle
和Triangle
类是派生类。在Shape
类中定义了一个虚函数area()
,在Rectangle
和Triangle
类中重写该虚函数,实现不同的功能。在main
函数中,通过基类指针对不同的子类进行操作,实现了多态的效果。