C++ Primer(第五版)7.2--7.2.1节练习

本文深入探讨C++中类的访问控制与封装概念,解释public与private成员的区别,以及如何通过封装保护类的内部状态。同时,介绍了友元机制及其潜在风险,展示了如何在类中正确使用构造函数和成员函数。

7.16    访问说明符指定其后成员的访问级别,其出现次数没有严格规定,有效范围直到出现下一个访问说明符或到达类结尾。可在整个程序内被访问的成员定义为public的;只能被类的成员函数访问,不能被使用该类的代码访问,定义为private的。

7.17    默认访问权限不同,struct所有成员是public的,class所有成员是private的。

7.18    封装可以隐藏类的实现细节,使用private封装成员,可以分离类的接口和实现,保护成员不被使用该类的代码访问。

7.19    可以把数据成员name和address设置为private的,类的构造函数和两个获取成员的函数设置为public。

7.20    当类允许其他类或函数访问其私有成员时,可以将其他类或函数声明为友元。友元可以访问类的私有成员,弊端是可能破坏类的封装。

7.21    修改struct Sales_data为class Sales_data

class Sales_data {
friend Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
friend istream &read(istream &is, Sales_data &item);
friend ostream &print(ostream &os, const Sales_data &item);
public:
	Sales_data()= default;
	Sales_data(const string &s): bookNo(s) { }
	Sales_data(const string &s, unsigned n, double p): 
				bookNo(s), units_sold(n), revenue(p * units_sold) { }
	Sales_data(istream &is) { read(is, *this); }
	string isbn() const { return bookNo; };
	Sales_data& combine(const Sales_data&);
private:
	string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

7.22    

class Person {
public:
	Person() = default;
	Person(const string &name, const string &add): name(name), address(add) { }
	string getName() const { return name; }
	string getAddress() const { return address; }
private:
	string name;
	string address;
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值