总结:
面对对象编程强调的是程序如何表示数据,使用OOP方法解决编程问题的第一步是根据它与程序之间的接口来描述程序,从而指定如何使用数据,设计一个类来实现该接口。即私有数据成员存储信息,公有成员函数(方法)提供访问数据的唯一途径。
类是用户定义的类型,对象是类的实例,C++试图让用户定义的类型尽可能与标准类型相似,因此可以声明对象、指向对象的指针和对象数组;
可以按值传递对象、将对象作为函数返回值、将一个对象赋予同类型的另一个对象;
若提供了构造函数,则在创建对象时,可以初始化对象;
若提供了析构函数,则在对象消亡后,程序将执行该函数。
如果希望成员函数能够对多个对象进行操作,可以将额外的对象作为参数传递,显式地引用调用对象,则可以使用this指针。
类很适合用于描述ADT,公有成员函数接口提供了ADT描述的服务,类的私有部分和类方法的代码提供了实现,这些实现对类的客户隐藏。
10.10 复习题
1.什么是类?
类是用户自己定义的数据类型,里面包括了想要描述操作的数据和数据存储形式以及操作数据要用的方法和函数即接口函数
2.类如何实现抽象、封装和数据隐藏?
抽象:类表示人们可以类方法的公有接口对类对象执行的操作,这是抽象。
封装:类的数据成员可以是私有的,也就是说只能通过成员函数来访问这些数据,这就是数据隐藏。实现的具体细节都是隐藏的,这就是封装。
数据隐藏:类里面定义private部分,私有部分只有通过成员函数才能访问类的成员数据
3.对象和类之间的关系?
类定义了一种数据类型,包括如何使用它。对象是一个变量或其它数据对象,并根据类定义被创建和使用。类和对象之间的关系同标准类型与变量之间的关系相同。
4.除了是函数之外,类函数成员与类数据成员之间的区别是什么?
如果创建给定类的多个对象,则每个对象都有其自己的数据内存空间;但所有的对象都使用同一组成员函数(通常,方法是公有的,而数据是私有的,但这只是策略方面的问题,而不是对类的要求)。
5.定义一个类表示银行账号........
class BankAccount
{
private:
char name[50];
char accountnum[50];
double balance;
public:
BankAccount(const char *client, const char *num, double bal = 0.0);//创建对象并且初始化
void show(void) const;
void deposit(double cash);
void withdraw(double cash);
};
6. 类构造函数在何时被调用?类析构函数呢?
在创建类对象或显式调用构造函数时,类的构造函数都将被调用。当对象过期时,类的析构函数将被调用。
7.给出复习题5中的银行账户类的构造函数的代码。
BankAccount::BankAccount(const char *client, const char *num, double bal) //定义形参不添加默认参数
{
name = client;
accountnum = num;
balance = bal;
}
8. 什么是默认构造函数,拥有默认构造函数的好处?
默认构造函数是没有参数或所有参数都有默认值的构造函数。拥有默认构造函数后,可以声明对象而不初始化它,即使已经定义了初始化构造函数。它还使得能够声明数组。
9. 修改Stock类,使之包含返回各个...
#ifndef __STOCK20_H__
#define __STOCK20_H__
#include <string>
//类只作函数的声明
class Stock
{
private:
std::string company;//公司名称
long shares; //股票支数
double share_val;//每支股票的价格
double total_val;//一共股票的总价格
void set_tot() {total_val = shares * share_val;}//比较简短就设置为内联函数
public:
Stock();
// Stock(const std::string &co = "Error", long n= 0, double pr =0.0); //默认构造函数
Stock(const std::string &co , long n, double pr);//获取哪家公司的股票,买多少支股票,每支股票价格
~Stock();
void buy(long num , double price);//购买股票的数量和价格
void sell(long num , double price);//出售股票的数量和价格
void update(double price);//更新股票的价格
void show() const;//显示股票当前信息
//函数返回值是const 类型的引用,函数名为topval,不允许通过this指针隐式访问对象
const Stock &topval(const Stock &s) const;
const string &company_name() const{return company;}
long num_shares() const {return share;}
double shareval() const {return share_val;}
double totalval() const {return total_val;}
};
#endif
10. his和*this是什么?
this指针是类方法可以使用的指针,它指向用于调用方法的对象。因此,this是对象的地址,*this就是对象本身。