建网站做联盟,备案网站名称怎么写个人,台州做网站是什么,宝塔备份wordpress目录标题 1. 什么是类#xff1f;2. 什么是对象#xff1f;3. 如何定义一个类#xff1f;4. 如何创建对象#xff1f;5. 类的构造函数6. 类的析构函数7. 数据封装和访问修饰符8. 示例#xff1a;一个简单的BankAccount类9. 使用g编译10. 再来一个简单的C程序11. 定义书籍类… 目录标题 1. 什么是类2. 什么是对象3. 如何定义一个类4. 如何创建对象5. 类的构造函数6. 类的析构函数7. 数据封装和访问修饰符8. 示例一个简单的BankAccount类9. 使用g编译10. 再来一个简单的C程序11. 定义书籍类 Book12. 实现书籍类的成员函数13. 使用书籍类14. 编译和运行15. 再来一个例子16. 定义账户类 Account17. 实现账户类 Account18. 定义银行类 Bank19. 实现银行类 Bank20. 使用Account和Bank类21. 编译和运行22. 拓展std::string getTitle() const; 这里的std是什么意思 面向对象编程Object-Oriented ProgrammingOOP是一种编程范式它使用“对象”来设计软件。在C中对象是通过类来创建的。类是创建对象的蓝图或模板。
1. 什么是类
类是一种用户定义的数据类型它拥有数据成员和成员函数。数据成员用于存储与类相关的信息而成员函数则用于操作这些数据。类可以看作创建对象的模板。
2. 什么是对象
对象是类的实例。一旦定义了类我们可以通过类创建对象对象包含了类中定义的数据成员和成员函数。
3. 如何定义一个类
C中类的定义以关键字class开始后跟类名和类体。类体包含在一对花括号中。通常类的定义会放在头文件中例如.h或.hpp文件。
// BankAccount.h
class BankAccount {
public:// 构造函数BankAccount(double balance);// 成员函数void deposit(double amount);void withdraw(double amount);double getBalance() const;private:// 数据成员double balance;
};4. 如何创建对象
创建类的对象非常简单只需像声明普通变量一样声明对象即可。
BankAccount myAccount(50.0);5. 类的构造函数
构造函数是一种特殊的成员函数它在创建对象时自动调用。构造函数的名称与类名相同。
// BankAccount.cpp
BankAccount::BankAccount(double initialBalance) : balance(initialBalance) {if (initialBalance 0) {balance 0;// 报告错误初始余额不能为负}
}6. 类的析构函数
析构函数是另一种特殊的成员函数它在对象销毁时自动调用。析构函数的名称是在类名前加上一个波浪号~。
7. 数据封装和访问修饰符
封装是面向对象编程的一个重要特征它防止了对对象内部的直接访问。在C中我们通过访问修饰符public、protected和private来实现封装。
8. 示例一个简单的BankAccount类
让我们来看一个完整的例子它定义了一个BankAccount类和相关的成员函数。
// BankAccount.hclass BankAccount {
public:BankAccount(double balance);void deposit(double amount);void withdraw(double amount);double getBalance() const;private:double balance;
};// BankAccount.cpp#include BankAccount.hBankAccount::BankAccount(double initialBalance) : balance(initialBalance) {if (initialBalance 0) {balance 0;// 报告错误初始余额不能为负}
}void BankAccount::deposit(double amount) {if (amount 0) {balance amount;} else {// 报告错误存款金额必须大于0}
}void BankAccount::withdraw(double amount) {if (amount balance) {// 报告错误不能透支账户} else {balance - amount;}
}double BankAccount::getBalance() const {return balance;
}// main.cpp#include iostream
#include BankAccount.hint main() {BankAccount myAccount(100.0);myAccount.deposit(50.0);myAccount.withdraw(25.0);std::cout 当前余额: $ myAccount.getBalance() std::endl;return 0;
}在这个例子中我们创建了一个BankAccount类它有一个构造函数两个操作余额的函数deposit和withdraw以及一个查询余额的函数getBalance。这个类的私有数据成员balance用于存储账户余额。 9. 使用g编译
要使用g编译上述示例需要确保所有的源文件.cpp和头文件.h都在同一个目录下。
使用g编译器编译BankAccount.cpp和main.cpp文件。
g -c BankAccount.cpp
g -c main.cpp这两个命令分别编译了BankAccount.cpp和main.cpp文件并生成了对应的目标文件.o文件。
接下来链接这些目标文件以生成最终的可执行文件。使用以下命令
g BankAccount.o main.o -o BankAccountApp这个命令将BankAccount.o和main.o文件链接在一起并创建了一个名为BankAccountApp的可执行文件。
运行生成的可执行文件
./BankAccountApp如果一切顺利应该会看到程序输出的当前余额。
完整的编译和运行命令序列如下
g -c BankAccount.cpp
g -c main.cpp
g BankAccount.o main.o -o BankAccountApp
./BankAccountApp
当前余额: $125如果希望一步完成编译和链接可以使用以下命令
g BankAccount.cpp main.cpp -o BankAccountApp这个命令会同时编译和链接所有的.cpp文件并生成一个名为BankAccountApp的可执行文件。然后可以运行这个可执行文件来查看程序的输出。 10. 再来一个简单的C程序
再创建一个简单的C程序这次我们将实现一个书籍类Book。这个类将包含一些基本属性如标题、作者和出版年份并提供一些成员函数来访问和修改这些属性。
11. 定义书籍类 Book
首先我们将定义一个名为 Book 的类它将具有三个私有成员标题title、作者author和出版年份publishYear。我们还将提供公共函数来构造书籍、设置和获取这些属性。
// Book.h
#ifndef BOOK_H
#define BOOK_H#include stringclass Book {
public:// 构造函数Book(const std::string title, const std::string author, int publishYear);// 成员函数void setTitle(const std::string title);void setAuthor(const std::string author);void setPublishYear(int year);std::string getTitle() const;std::string getAuthor() const;int getPublishYear() const;private:std::string title;std::string author;int publishYear;
};#endif12. 实现书籍类的成员函数
接下来我们实现这个类的成员函数。这些函数包括构造函数、设置和获取属性的函数。
// Book.cpp
#include Book.hBook::Book(const std::string title, const std::string author, int publishYear): title(title), author(author), publishYear(publishYear) {}void Book::setTitle(const std::string title) {this-title title;
}void Book::setAuthor(const std::string author) {this-author author;
}void Book::setPublishYear(int year) {this-publishYear year;
}std::string Book::getTitle() const {return title;
}std::string Book::getAuthor() const {return author;
}int Book::getPublishYear() const {return publishYear;
}13. 使用书籍类
最后我们将在 main 函数中创建和使用 Book 类的实例。
// main.cpp
#include iostream
#include Book.hint main() {// 创建 Book 类的一个对象Book myBook(1984, George Orwell, 1949);// 输出书籍信息std::cout Book: myBook.getTitle() std::endl;std::cout Author: myBook.getAuthor() std::endl;std::cout Publish Year: myBook.getPublishYear() std::endl;// 修改书籍信息myBook.setTitle(Animal Farm);myBook.setAuthor(George Orwell);myBook.setPublishYear(1945);// 输出修改后的书籍信息std::cout Updated Book: myBook.getTitle() std::endl;std::cout Updated Author: myBook.getAuthor() std::endl;std::cout Updated Publish Year: myBook.getPublishYear() std::endl;return 0;
}14. 编译和运行
为了编译和运行这个程序你可以使用类似之前的 g 命令
g Book.cpp main.cpp -o BookApp
./BookApp
Book: 1984
Author: George Orwell
Publish Year: 1949
Updated Book: Animal Farm
Updated Author: George Orwell
Updated Publish Year: 1945这会编译你的程序并生成一个可执行文件 BookApp运行这个可执行文件将显示书籍信息和更新后的信息。 15. 再来一个例子
让我们设计一个更具交互性的例子这次我们将创建一个简单的银行账户系统。这个系统会包含两个类Account和Bank。Account类将用于处理单个银行账户的基本信息和操作如存款、取款和查询余额而Bank类将管理多个账户并允许添加新账户。
16. 定义账户类 Account
首先我们定义一个Account类它包含账户的基本信息和操作。
// Account.h
#ifndef ACCOUNT_H
#define ACCOUNT_H#include stringclass Account {
public:Account(const std::string owner, double balance);void deposit(double amount);bool withdraw(double amount);double getBalance() const;std::string getOwner() const;private:std::string owner;double balance;
};#endif17. 实现账户类 Account
现在我们来实现Account类的成员函数。
// Account.cpp
#include Account.hAccount::Account(const std::string owner, double balance): owner(owner), balance(balance) {}void Account::deposit(double amount) {if (amount 0) {balance amount;}
}bool Account::withdraw(double amount) {if (amount 0 amount balance) {balance - amount;return true;}return false;
}double Account::getBalance() const {return balance;
}std::string Account::getOwner() const {return owner;
}18. 定义银行类 Bank
接着我们定义一个Bank类来管理多个Account。
// Bank.h
#ifndef BANK_H
#define BANK_H#include Account.h
#include vectorclass Bank {
public:void addAccount(const Account account);void printAccounts() const;private:std::vectorAccount accounts;
};#endif19. 实现银行类 Bank
最后我们实现Bank类的功能。
// Bank.cpp
#include Bank.h
#include iostreamvoid Bank::addAccount(const Account account) {accounts.push_back(account);
}void Bank::printAccounts() const {for (const auto account : accounts) {std::cout Owner: account.getOwner() , Balance: $ account.getBalance() std::endl;}
}20. 使用Account和Bank类
最后我们在main函数中使用这些类。
// main.cpp
#include Account.h
#include Bank.hint main() {Account a1(John Doe, 1000);Account a2(Jane Doe, 1500);Bank bank;bank.addAccount(a1);bank.addAccount(a2);bank.printAccounts();return 0;
}21. 编译和运行
同样地使用g将这些文件编译成一个可执行文件
g Account.cpp Bank.cpp main.cpp -o BankSystem
./BankSystem
Owner: John Doe, Balance: $1000
Owner: Jane Doe, Balance: $1500运行这个指令后你将看到输出的账户信息这表明我们的简易银行系统能够管理多个账户并打印它们的信息。 22. 拓展std::string getTitle() const; 这里的std是什么意思
在C中std 是标准命名空间standard namespace的名称它是由C标准库定义的。命名空间是一种将全局作用域分割的机制用于解决命名冲突的问题特别是当不同的库可能包含相同名称的标识符时。
在C中标准库中的所有组件如 std::string、std::vector、std::cout 等都被定义在 std 命名空间中。因此当你在代码中看到 std:: 前缀时它表明你正在使用的标识符是标准库的一部分。
例如std::string 是一个类它提供了字符串的功能而 std::cout 是一个对象用于向标准输出流通常是控制台输出数据。
在你的代码示例中std::string getTitle() const; 是一个成员函数声明它返回一个 std::string 类型的值。这意味着 getTitle 函数将返回一个字符串这个字符串是标准库中的 string 类型。const 关键字表示这个函数不会修改调用它的对象的状态即它是一个“只读”函数。
当你在代码中使用标准库的组件时你需要使用 std:: 前缀除非你已经通过 using 指令导入了特定的名称到当前作用域中。例如
#include string // 包含string头文件// 使用std::string因为还没有导入到当前作用域
void someFunction() {std::string myString Hello, world!;
}// 使用using指令导入std::string到当前作用域
using std::string;void anotherFunction() {string anotherString Another message!; // 不需要std::前缀
}在 anotherFunction 中由于我们已经使用 using 指令导入了 std::string所以可以直接使用 string 而不需要 std:: 前缀。然而在 someFunction 中我们没有导入 std::string所以我们必须使用 std::string。