C++作为一种强大的编程语言,其面向对象编程(OOP)的特性使得它在系统级编程和游戏开发等领域有着广泛的应用。为了帮助你更好地掌握C++的面向对象编程,以下准备了10个实用练习题,通过解决这些问题,你可以轻松提升自己的技能。
练习题1:类和对象的创建
题目描述: 创建一个名为Car的类,包含属性brand和model,以及方法startEngine()和stopEngine()。
解答:
#include <iostream>
#include <string>
class Car {
private:
std::string brand;
std::string model;
public:
Car(std::string b, std::string m) : brand(b), model(m) {}
void startEngine() {
std::cout << "Engine started for " << brand << " " << model << std::endl;
}
void stopEngine() {
std::cout << "Engine stopped for " << brand << " " << model << std::endl;
}
};
int main() {
Car myCar("Toyota", "Corolla");
myCar.startEngine();
myCar.stopEngine();
return 0;
}
练习题2:继承
题目描述: 创建一个名为SportsCar的类,继承自Car类,并添加一个新方法accelerate()。
解答:
class SportsCar : public Car {
public:
SportsCar(std::string b, std::string m) : Car(b, m) {}
void accelerate() {
std::cout << "Accelerating " << brand << " " << model << std::endl;
}
};
练习题3:多态
题目描述: 创建一个基类Vehicle,以及派生类Car和Truck。定义一个方法honk(),并在派生类中重写该方法。
解答:
class Vehicle {
public:
virtual void honk() {
std::cout << "Beep beep!" << std::endl;
}
};
class Car : public Vehicle {
public:
void honk() override {
std::cout << "Car horn beep beep!" << std::endl;
}
};
class Truck : public Vehicle {
public:
void honk() override {
std::cout << "Truck horn beep beep!" << std::endl;
}
};
练习题4:构造函数和析构函数
题目描述: 在Car类中添加一个构造函数和一个析构函数。
解答:
class Car {
private:
std::string brand;
std::string model;
public:
Car(std::string b, std::string m) : brand(b), model(m) {
std::cout << "Car " << brand << " " << model << " created." << std::endl;
}
~Car() {
std::cout << "Car " << brand << " " << model << " destroyed." << std::endl;
}
};
练习题5:封装
题目描述: 将Car类的brand和model属性设置为私有,并提供公共方法来访问和修改它们。
解答:
class Car {
private:
std::string brand;
std::string model;
public:
Car(std::string b, std::string m) : brand(b), model(m) {}
std::string getBrand() const {
return brand;
}
std::string getModel() const {
return model;
}
void setBrand(const std::string& b) {
brand = b;
}
void setModel(const std::string& m) {
model = m;
}
};
练习题6:友元函数
题目描述: 在Car类中添加一个友元函数,用于输出车的详细信息。
解答:
class Car {
private:
std::string brand;
std::string model;
public:
Car(std::string b, std::string m) : brand(b), model(m) {}
friend void printCarDetails(const Car& car);
};
void printCarDetails(const Car& car) {
std::cout << "Car Details: " << car.getBrand() << " " << car.getModel() << std::endl;
}
练习题7:静态成员
题目描述: 在Car类中添加一个静态成员变量,用于跟踪创建的Car对象数量。
解答:
class Car {
private:
static int carCount;
public:
Car(std::string b, std::string m) : brand(b), model(m) {
carCount++;
}
static int getCarCount() {
return carCount;
}
};
int Car::carCount = 0;
练习题8:模板
题目描述: 创建一个模板类Box,可以存储任何类型的数据。
解答:
template <typename T>
class Box {
private:
T data;
public:
Box(T d) : data(d) {}
T getData() const {
return data;
}
};
练习题9:异常处理
题目描述: 在Car类中添加一个方法tryStartEngine(),使用异常处理来处理引擎无法启动的情况。
解答:
class Car {
private:
std::string brand;
std::string model;
public:
Car(std::string b, std::string m) : brand(b), model(m) {}
void tryStartEngine() {
if (brand == "Non-existent") {
throw std::runtime_error("Engine cannot start. Brand does not exist.");
}
std::cout << "Engine started for " << brand << " " << model << std::endl;
}
};
练习题10:智能指针
题目描述: 使用智能指针std::unique_ptr创建一个Car对象,并在使用完毕后自动释放内存。
解答:
#include <memory>
int main() {
std::unique_ptr<Car> myCar(new Car("Toyota", "Corolla"));
myCar->startEngine();
// 当myCar超出作用域时,内存会自动释放
return 0;
}
通过完成这10个练习题,你将更加深入地理解C++面向对象编程的核心概念。不断练习和实践是提高编程技能的关键,祝你在编程的道路上越走越远!
