C++关于指针、继承和多态介绍
指针
在C++中,指针是一种保存其他变量内存地址的变量。使用指针可以传递地址而不是传递变量值。
指针的定义和使用
指针的定义方式:数据类型 *指针名称 = &变量名称;
,其中“*”表示声明一个指针变量,&表示取变量地址。
int num = 10;
int *pNum = # // 定义指向num变量的指针
指针的使用方式:通过指针访问变量。
cout << *pNum << endl; // 输出num的值
指针的运算
指针可以进行四种基本运算:加上一个整数、减去一个整数、两个指针相减、比较两个指针。
int arr[5] = {1, 2, 3, 4, 5};
int *pArr = arr;
pArr += 2; // pArr指向arr[2]
cout << *pArr << endl; // 输出arr[2]的值
继承
在C++中,继承是一种代码复用机制,允许一个类继承另一个类的属性和方法。继承的类称为派生类,被继承的类称为基类。
继承的类型
C++中有三种继承方式:公有继承、私有继承、保护继承。
- 公有继承:派生类和外部代码可以访问基类的公有成员。
- 私有继承:派生类可以访问基类的公有和私有成员,但外部代码无法访问。
- 保护继承:派生类可以访问基类的公有和保护成员,外部代码无法访问。
继承的语法
继承是通过在派生类中使用“:”符号来实现的。
class 基类 {
public:
int a;
void funcA();
};
class 派生类 : public 基类 { // 公有继承基类
public:
int b;
void funcB();
};
多重继承
多重继承是指派生类同时从两个或两个以上的基类继承属性和方法。C++支持多重继承,但需要避免菱形继承问题。
多态
在C++中,多态允许不同类的对象使用相同的方法名称,但实现不同的方法行为。多态有两种实现方式:虚函数和纯虚函数。
虚函数
在基类中声明虚函数,然后在派生类中重写该函数,从而实现多态特性。
class Animal {
public:
virtual void sound() {
cout << "This is an animal." << endl;
}
};
class Dog : public Animal {
public:
void sound() {
cout << "Bark!" << endl;
}
};
纯虚函数
纯虚函数是在基类中声明但不实现的虚函数,这样派生类必须实现该函数才能实例化。
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数
};
class Square : public Shape {
public:
double getArea() {
return width * width;
}
private:
double width;
};
示例
指针示例
int num1 = 10, num2 = 20;
int *pNum1 = &num1, *pNum2 = &num2;
*pNum1 = *pNum1 * 2;
*pNum2 += *pNum1;
cout << num1 << endl; // 输出20
cout << num2 << endl; // 输出40
继承和多态示例
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数
};
class Square : public Shape {
public:
Square(double w) : width(w) {}
double getArea() {
return width * width;
}
private:
double width;
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {}
double getArea() {
return 3.14 * radius * radius;
}
private:
double radius;
};
int main() {
Shape *pShape;
Square sq(2.0);
Circle cr(3.0);
pShape = &sq;
cout << "Square area: " << pShape->getArea() << endl;
pShape = &cr;
cout << "Circle area: " << pShape->getArea() << endl;
return 0;
}
输出:
Square area: 4
Circle area: 28.26
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++关于指针,继承和多态介绍 - Python技术站