C Primer-C Primer精髓解析从入门到高级编程
在编程领域中,C++ Primer作为一本经典教材,被广泛应用于学习和实践。它不仅为初学者提供了基础的知识体系,还对高级特性进行了深入探讨。今天,我们就来看看如何将《C++ Primer》中的知识应用到实际项目中。
首先,让我们从一个简单的案例开始。假设我们要创建一个小型购物车程序,其中包含商品列表、添加商品、删除商品以及计算总价等功能。这是一个非常适合用来练习使用类和对象的场景。
#include <iostream>
#include <vector>
class Product {
public:
std::string name;
double price;
Product(std::string n, double p) : name(n), price(p) {}
};
int main() {
// 创建产品列表
std::vector<Product> products = {
{"apple", 0.99},
{"banana", 0.59},
{"orange", 1.49}
};
int choice;
while (true) {
// 显示菜单并获取用户选择
std::cout << "Shopping Cart\n";
for (size_t i = 0; i < products.size(); ++i) {
std::cout << "[" << i + 1 << "] " << products[i].name << ": $"
<< products[i].price<< "\n";
}
std::cout << "Enter the number of your choice or 'q' to quit: ";
if (!(std::cin >> choice)) {
break;
}
if (choice == 'q') break;
--choice; // 因为数组索引是从0开始,所以需要减去1
if (choice >= 0 && choice < static_cast<int>(products.size())) {
// 添加或移除商品
auto& product = products[choice];
product.price *= -product.price; // 如果价格变成负数,则认为已被选中
if(product.price > 0)
continue;
product.price *= -product.price;
std :: cout<<"You have added "<<product.name<<" to cart.\n";
continue;
} else {
std :: cout <<"Invalid option!\n";
continue;
}
}
return EXIT_SUCCESS;
}
这段代码实现了一个基本的购物车功能,展示了如何使用Product类表示不同类型的商品,并且通过向量存储这些产品。在主函数中,我们循环显示菜单,并根据用户输入操作购物车。
接下来,让我们看另一个更复杂的案例:设计一个模拟银行账户系统。在这个系统中,每个账户都有自己的余额,并允许用户查询余额、存款和取款。
#include <iostream>
#include <map>
using namespace std;
class BankAccount {
private:
map<string, double> accounts_;
public:
void addAccount(string accNum, double initialBalance){
accounts_[accNum] = initialBalance ;
}
bool hasAccount(string accountNumber)const{
return accounts_.find(accountNumber)!=accounts_.end();
}
bool deposit(const string& accountNumber , const double amount )const{
auto it=accounts_.find(accountNumber);
if(it!=accounts_.end())it->second+=amount ;
return true ;
}
// ...
};
在这个示例中,我们定义了一个名为BankAccount 的类,它维护了一张银行账户映射表,其中键是账户号码,值是对应账户的余额。addAccount 方法用于添加新的银行账户,而hasAccount 用于检查某个账户是否存在,deposit 方法则用于执行存款操作。
最后,由于《C++ Primer》强调面向对象编程(OOP)概念,这里还有另外的一个关于继承与多态性的示例:
class Animal{
protected:
virtual void sound() const{} ;
};
class Dog : public Animal {
public:
void sound() const override{
cout<< "Woof!"<< endl ;
}
};
int main () {
Dog myDog ;
myDog.sound () ;
return EXIT_SUCCESS ;}
这里,我们定义了Animal基类,它拥有保护成员sound方法并声明其为虚函数,以便子类重写。在派生自Animal 的Dog 类中,我们覆盖sound方法,使之发出“Woof!”的声音。当我们创建Dog 对象并调用其sound方法时,就能看到多态性的效果,因为尽管myDog 是dog类型,但当调用它时,其行为就像调用任何其他Animal 类型对象一样,从而输出“Woof!”而不是抛出错误或异常。此外,在main 函数末尾返回EXIT_SUCCESS 表明程序成功结束。
以上就是几个基于《C++ Primer》的真实案例示范。它们涵盖了从简单购物车到复杂银行系统再到面向对象编程方面的一些关键概念。如果你想进一步深化你的c++技能,《C++ Primer》无疑是一个不可忽视的资源,它将帮助你掌握现代c++语言,同时也能够让你在实际项目开发过程中的应用能力得到提升。