每日十问10c++-对象和类

每日十问10c+±对象和类

1.什么是类?

解析:
面向对象的思想把程序设计的关注点从程序运行的过程、步骤及其分解和组合,转向分析程序中数据的属性和数据的操作。在这种思想的指导下C++更加强调数据的抽象和设计。类就是一种用户自定义的关于数据的抽象的组合,它描述了程序中数据的基本构成(数据成员)以及对数据的访问和操作(成员函数或方法)。在类的基础上可以通过大量数据对象的组合和数据对象间的信息传递来组成完整的应用程序,实现最终的功能性目标。

2.类如何实现抽象、封装和数据隐藏?
解析:
类的定义本质上就是对数据的一种抽象过程,这种抽象一方面把复杂的数据结构分解为基本数据类型的组合,一方面定义和实现了对复杂数据类型的操作。因此,类的定义就是把程序中的数据还原成一种基本数据模型和相应操作方式的抽象化过程。C++语言中把类内的数据成员和成员函数通过类的作用域以及3种基本访问控制(public、private、protected)进行了数据封装,从类的外部无法访问类的基本数据,而只能通过类的对象实体和类内的公有成员才能够访问,这样类就实现了基本的数据隐藏和封装。
3.对象和类之间的关系是什么?
解析:
面向对象的程序设计中,类是一种数据及其操作的模型定义,也就是一种数据的抽象通过类可以生成很多对象实体,同一个类生成的每一个对象实体都能够在存储空间内拥有自己的存储空间单元,实现数据的存储和访问操作。因此可以认为类是抽象模型,对象是由类这个数据抽象模型实例化之后创建的真实数据单元。
4.除了类的函数成员是函数之外,类的函数成员与类的数据成员之间的区别还有什么?

解析:
从性质上看,类的数据成员用来描述类的基本数据构成,定义其存储空间和类型;而函数成员则是类的操作功能的定义。从存储上看,类所创建的每个新对象都有自己的存储空间。类的数据成员是每一个对象所独享的,但同一个类的所有对象共享同一组函数成员,即每种方法对于所有对象来说只有一个副本。

5.定义一个类来表示银行账户。数据成员包括储户姓名、账号(两者使用字符串表示)和存款。成员函数执行如下操作。
创建一个对象并将其初始化。显示储户姓名、账号和存款。存入参数指定的存款。取出参数指定的存款。
请提供类声明,而不用给出方法实现(编程练习7将要求编写实现)。习题解析:
本题中的银行账号类包括3个数据成员,其中两个数据成员是字符串,存款应使用 double 类型数据。数据成员应设置为私有成员。成员函数包括构造函数、析构函数、输出账户信息的函数、存取款函数(对应存取款操作),因此可以设计如下类。
class BankAccount{

private:
string fullname;

​ string accid;

​ double balance;

public:
BankAccount();
BankAccount(const string name, const string id, double bal);

​ ~BankAccount();
​ void init account(const string name, const string id, double bal);

​ void get info() const;
​ void deposit(double cash);

​ void withdraw(double cash);

};
6.类的构造函数在何时调用?类的析构函数呢?
解析:
类的构造函数是一个特殊的成员函数,在创建类对象时构造函数会被调用,用来初始化对象内的各数据成员。通常创建对象有两种情况。一种是直接创建类的变量,另外一种情况是通过 new 创建一个动态对象。这两种情况下都会自动调用构造函数。析构函数在类对象被回收、销毁时自动调用。对象被回收、销毁也有两种情况。一种是该变量在超过生命周期之后会被自动回收,另一种情况是动态对象通过 delete 回收时会自动调用析构函数。

7、给出复习题5中银行账户类的构造函数的代码。
解析:
复习题5中银行账户类的构造函数原型如下。 BankAccount();

BankAccount(const string name, const string id, double bal);
其私有成员定义为 string 类型的字符串,必须包含头文件 string。string的使用较简单可以直接使用 string 的赋值功能。
BankAccount(const string name, const string id, double bal);
fullname=name; accid=id; balance=bal;
BankAccount::BankAccount()
fullname=“”; accid =“”; balance = 0;
如果使用了字符数组形式则需要使用 stncpy0),且包含头文件cstring,例如,通过 strncpy(fullname,name)来实现数据成员的初始化。
8.什么是默认构造函数?拥有默认构造函数有何好处?

解析:
默认构造函数是指没有参数的构造函数,或者所有参数都有默认值的构造函数。默认构造函数能够创建类对象而不用初始化该对象,这种使用形式和基本数据类型类似,能够实现一种更加灵活和安全的对象创建方式。如果在定义类时没有定义构造函数,那么系统将会自动创建一个默认构造函数,但是如果用户定义了其他任何一一个构造函数,就必须要手动定义一个默认构造函数。
9.修改 Stock 类的定义(stock20.h中的版本),使之包含返回各个数据成员值的成员函数。注意,返回公司名的成员函数不应为修改数组提供便利,也就是说,不能简单地返回 string 引用。
解析:
stock20.h 文件如下。
//stock20.h --增强版本

#ifndef STOCK20_H_

#define STOCK20_H_

#include
class Stock

{

private:
std::string company;

​ int shares;
​ double shareval;

​ double total val;
​ void set_tot() {

​ total_val = shares *share val;

)

public:
Stock(); //默认构造函数
Stock(const std::string & co, long n = 0, double pr = 0.0);
~Stock(); nt0:1/不执行任何操作的析构函数
void buy(long num, double price);

​ void sell(long num, double price);

​ void update(double price);
​ const Stock & topval(const stock & s)const;

};

#endif

题目要求添加返回各个数据成员值的函数,因此应当包括以下函数。

int numshares()const:
double shareval() const ;
double totalval() const;
const string &co name() const ;
这4个函数分别返回4个数据成员。

完整代码如下。

#ifndef STOCK30_H_

#define STOCK30_H_

class Stock {
private: pstd::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, 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 Stock &topval(const stock &s) const;
int numshares() const { return shares; } double shareval() const(
return share val;
double totalval()const{pt

return total val;

}

const string aco name() const { return company; }};

10.this 和this 表示什么?**

解析:
C++在类的定义中可以使用一个特殊的指针 this,该指针是指向由该类创建的对象本身的指针。请注意,该指针是指向类对象实体的指针,而不是针对类的。也就是说,this 本质上是每一个对象本身的地址,而
this 则是该对象本身。在类的定义过程中,可以通过 this指针来调用成员函数的对象。this 虽然在类的定义中使用,但是它本质上是在类生成对象时关于具体对象的指针。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值