首页 > 编程语言 >C++PrimerPlus:第十三章类和继承:访问控制:protected

C++PrimerPlus:第十三章类和继承:访问控制:protected

时间:2024-06-18 19:57:54浏览次数:14  
标签:PrimerPlus 访问控制 成员 C++ 访问 protected 基类 balance

第十三章类和继承:访问控制:protected

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:访问控制:protected


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

例如:访问控制:protected


提示:以下是本篇文章正文内容,下面案例可供参考

一、访问控制:protected

到目前为止,本书的类示例已经使用了关键字 public 和 private 来控制对类成员的访问。还存在另一个访问类别,这种类别用关键字 protected表示。关键字 protected与 private 相似,在类外只能用公有类成员来访问 protected 部分中的类成员。private 和 protected 之间的区别只有在基类派生的类中才会表现出来。派生类的成员可以直接访问基类的保护成员,但不能直接访问基类的私有成员。因此,对于外部世界来说,保护成员的行为与私有成员相似;但对于派生类来说,保护成员的行为与公有成员相似。例如,假如 Brass 类将balance 成员声明为保护的:

Class Brass
protected:
	double balance;

BrassPlus::Withdraw()的核心:
在这种情况下,BrassPlus类可以直接访问balance,而不需要使用Brass 方法。例如,可以这样编写

void BrassPlus::Withdraw(double amt)
{
	if(amt <0)
		cout <<"Withdrawal amount must be positive";
		<<"withdrawal canceled.\n";
	else if(amt <= balance)
		balance -=amt;
	else if(amt<=balance +maxLoan -owesBank)
	{
		double advance=amtbalance;
		owesBank+=advance(1.0+rate);
		cout<<"Bankadvance:$<<advance<<endl;
		cout<<"Finance charge:$"<< advance *rate << endl;
		Deposit(advance);
		balance -=amti
	}
else
	Cout <<"Credit limit exceeded,Transaction cancelled.\n";
}

使用保护数据成员可以简化代码的编写工作,但存在设计缺陷。例如,继续以BrassPlus为例,如果balance是受保护的,则可以按下面的方式编写代码:

void BrassPlus::Reset(double amt)
{
	balance =amt;
}

Brass 类被设计成只能通过 Deposit()和 Withdraw()才能修改 balance。但对于 BrassPlus对象,Reset()方法将忽略 Withdraw()中的保护措施,实际上使 balance 成为公有变量,。


警告:最好对类数据成员采用私有访问控制,不要使用保护访问控制;同时通过基类方法使派生类能够访问基类数据。

然而,对于成员函数来说,保护访问控制很有用,它让派生类能够访问公众不能使用的内部函数。


总结

提示:这里对文章进行总结:
1,protected,同public private类型
2,protected报复的属性,派生类可以直接访问,而不需要基类的方法
3,单protected也有设计缺陷,当受报复的属性,我们一般基类的方法去访问,但是protected去能绕过这种基址。
4,对于成员函数来说,保护访问控制很有用,它让派生类能够访问公众不能使用的内部函数

标签:PrimerPlus,访问控制,成员,C++,访问,protected,基类,balance
From: https://blog.csdn.net/zhyjhacker/article/details/139780521

相关文章

  • 理解 C++ 中的对象类型与绑定机制:静态绑定 vs 动态绑定
    静态绑定和动态绑定概念解释对象的静态类型:对象在声明时采用的类型,在编译期确定,无法更改。对象的动态类型:对象在运行期实际表现的类型,在运行期决定,对象的动态类型可以更改(通过多态和指针/引用的方式)。静态绑定:绑定的是对象的静态类型,某特性(比如函数调用)依赖于对象的静......
  • 《C++ Primer》导学系列:第 5 章 - 语句
    5.1简单语句5.1.1基本概念在C++中,简单语句是构成程序的基本单元。每个简单语句以分号(;)结束,可以是表达式、声明或空语句。5.1.2表达式语句表达式语句是由表达式构成的语句,通常用于计算、赋值和函数调用。示例代码#include<iostream>intmain(){inta=10;......
  • c++期末题库三(读程序写结果)
    1.#include<iostream>usingnamespacestd;classBC{public:BC(intn=100){val=n;cout<<"defaultcon."<<endl;}BC(BC&t){val=t.val;cout<<"Copycon."<<endl;}BC&operator=(BC&t){val=t.val;c......
  • VC++ gen uuid and time
    //ConsoleApplication2.cpp:Thisfilecontainsthe'main'function.Programexecutionbeginsandendsthere.//#define_CRT_SECURE_NO_WARNINGS#pragmacomment(lib,"rpcrt4.lib")#include<windows.h>#include<rpcdce.h>#......
  • C/C++ main 函数注意事项
    main 函数是C/C++程序的入口点,当运行程序时,操作系统会调用 main 函数来启动程序。下面为 main 函数的注意事项:函数签名:在C/C++中,main 函数的标准签名通常有两种形式:intmain(){//...}intmain(intargc,char*argv[]){//...}其中,argc 是命......
  • C++ 20新特性之原子引用
    ......
  • 【C/C++】实现高性能日志轮转功能,已实测
    基本实现在C语言中实现日志文件轮转功能,你需要手动编写代码来处理文件的重命名、压缩和删除。下面是一个简单的C语言程序示例,它演示了如何实现基本的日志文件轮转功能。这个程序会检查日志文件的大小,如果超过预设的大小限制,则将当前日志文件重命名,并创建一个新的日志文件。......
  • LeetCode 算法: 环形链表 c++
    原题链接......
  • C++的动态内存管理
    C++的new和delete一、C与C++的内存管理以及分配二、C++中的new和delete1、new/new[]和delete/delete[]的用法2、new和delete对于内置类型和自定义类型的区别三、new和delete的底层原理1、全局的operatornew和全局的operatordelete2、对于内置类型和自定义类型两个全局......
  • [C++][数据结构][红黑树]详细讲解
    目录1.红黑树的概念2.红黑树的性质3.红黑树节点的定义4.红黑树的结构5.红黑树的插入操作1.cur为红,p为红,g为黑,u存在且为红2.cur为红,p为红,g为黑,u不存在/u存在且为黑--单旋+变色3.cur为红,p为红,g为黑,u不存在/u存在且为黑--双旋+变色6.红黑树的迭代器1.begin()与end()2.o......