1. 程式人生 > >C++ 程式碼重用 05-- 19.25-2.保護繼承 公有私有和保護繼承的不同

C++ 程式碼重用 05-- 19.25-2.保護繼承 公有私有和保護繼承的不同

#include <iostream>
using namespace std;
/*---------------------------------
                    19.25-2.保護繼承


       變化        |     公有繼承	  |      保護繼承	 |    私有繼承
基類的公有成員變成 | 派生類的公有成員 | 派生類的保護成員 | 派生類的私有成員
基類的保護成員變成 | 派生類的保護成員 | 派生類的保護成員 | 派生類的私有成員
基類的私有成員變成 |                 只能通過基類的介面訪問
---------------------------------*/
class A
{
public:
	void set(int a,int b){x=a;y=b;}
	void show(){  cout<<x<<endl<<y<<endl;}
protected:
	int x;
private:
	int y;
};
class B:protected A
{
public:
	void setb(int a,int b){ set(a,b);} //基類的公有成員函式set被保護派生後,不能直接訪問,但可以這樣間接訪問
	void setxy(int a,int b)
	{
		x=a;   //基類的保護成員被保護繼承後,能夠間接訪問
		//y=b; //編譯報錯,基類的私有成員被保護繼承後,不可直接訪問的,也不能間接訪問
	}
	void showb(){  show();}
};
int main()
{
	B b;
	//b.set(1,2);//編譯報錯,基類的公有成員函式set被保護派生後,不能直接訪問
	//b.show();  //編譯報錯,基類的公有成員函式show被保護派生後,不能直接訪問
	/*修改如下*/
	b.setb(1,2);
	b.showb();
	cout<<"----------"<<endl;
	b.setxy(3,4);
	b.showb();
	return 0;
}


執行結果:

1
2
----------
3
2
Press any key to continue

相關推薦

C++ 程式碼重用 05-- 19.25-2.保護繼承 公有私有保護繼承不同

#include <iostream> using namespace std; /*--------------------------------- 19.25-2.保護繼承 變化 |

c++ 程式碼重用

1. string類用來處理字串,valarray類用來處理數值。 2. 公有繼承,類可以繼承介面和實現;組合關係,獲得實現,不能獲得介面。 3. 類成員使用建構函式初始化時,初始化的順序是成員被類宣告的順序,而不是建構函式的成員列表的順序。 4. 使用包含時將使用物件名來呼叫基類方法,

Sublime text 3開啟C程式碼經常是tabsize為2的解決辦法

問題: 使用Sublime text 3.1.1開啟c原始碼,會看到右下角的Spaces: 2的提示, 而實際上是設定為tab_size為4的, 解決辦法: 1、原因在於設定中還有一項“detect_indentation”, 該項設定為tru

2018-05-19 css-2

css id選擇器 id選擇器 id選擇器可以為標有特定id的html元素制定特定的樣式 id選擇器以”#”來定義。 下面的兩個id選擇器,第一個可以定義元素的顏色為紅色,第二個定義元素的顏色為綠色: #red {color:red;} #gree

C++ 多執行緒框架 (2):Mutex 互斥 Sem 訊號量

互斥和訊號量是多執行緒程式設計的兩個基礎,其原理就不詳細說了,大家去看看作業系統的書或者網上查查吧。 對於互斥的實現,無論什麼作業系統都離不開三個步驟 1.初始化互斥鎖 2.鎖操作 3.解鎖操作 對於不同的系統只是實現的函式有一些不同而已,但是功能其實都大同小異,在

C++繼承公有私有保護

公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。 2. 私有繼承(

C語言進階指南(2)丨數組指針、打樁

編譯器 atexit text ret The 共享 tex 語言 .org 三、指針和數組 盡管在某些上下文中數組和指針可相互替換,但在編譯器看來二者完全不同,並且在運行時所表達的含義也不同。 當我們說對象或表達式有類型的時候,我們通常想的是定位器值的類型,也叫做左值

More Effective C++: 05技術(25-28)

print div 子類 text 不可移植 double 默認 一次 theme 25:將constructor 和 non-member functions 虛化 所謂 virtual constructor是某種函數,視其輸入可產生不同類型的對象。比

C++PrimerPlus學習之C++中的程式碼重用

has-a關係 包含物件成員的類 易於理解及使用 可包含多個基類,易於區分。 建構函式初始化的是成員物件,而不是繼承的物件,所以在初始化列表中使用的是成員名,而不是類名。 當初始化列表包含多個專案時,這些專案被初始化的順序為

第14章 C++中的程式碼重用

本章內容包括: has-a關係 包含物件成員的類 模板類valarray 私有和保護繼承 多重繼承 虛基類 建立類模板 使用類模板 模板的具體化 通常,包含,私有繼承和保護繼承用於實現has-a關係,即新的類將包含另一個類的物件.&n

課程設計之四位加法計算器(2)(C程式碼

#include<reg52.h> typedef unsigned char uint8; typedef unsigned int uint16; sbit rw=P2^5; sbit rs=P2^6; sbit e=P2^7; sbit led=P3

C++Primer Plus筆記——第十四章 C++中的程式碼重用總結及程式清單

目錄 本章小結 程式清單 本章小結         C++提供了幾種重用程式碼的手段。第13章介紹的公有繼承能夠建立is-a關係,這樣派生類可以重用基類的程式碼。私有繼承和保護繼承也使得能夠重用基類的程式碼。但建立的

C++Primer Plus筆記——第十四章 C++中的程式碼重用課後程式設計練習答案

程式設計練習答案 習題1     習題2     習題3    習題4    習題5 習題1 //winec.h #ifndef WINEC_H_ #define WINEC_H_ #include <iostream> #include <strin

C/C++程式碼練習11】1-1/2+1/3-1/4+...+1/n的兩種計算方法

方法一: #include <stdio.h> #include <math.h> int main(void) { int n; scanf("%d",

影象處理之其他雜項(一)之MeanShift的目標跟蹤演算法opencv c++程式碼 VS2015+opencv3.2

//#include "stdafx.h" //#include "cv.h" //#include "highgui.h" #include<opencv.hpp> #define u_char unsigned char #define DIST 0.5 #define

C++中的程式碼重用(七)=>模板友元

對於模板的友元一般分為三種: 1.非模板友元 2.約束模板函式 3.非約束模板函式 例子如下所示 //class_friend.h #ifndef CLASS_FRIEND_H #define CLASS_FRIEND_H /*非模板友元*/ #include<iostre

C++中的程式碼重用(六)

成員模板  //example.h #ifndef _EXAMPLE_H_ #define _EXAMPLE_H_ /*模板類和模板函式一樣也存在隱、顯式例項化以及顯式例項化,部分具體化*/ /*模板成員*/ #include<iostream> template<t

第十八週專案實踐3.1(2)程式設計處理c程式碼

/****************************************************** Copyright (c) 2016,煙臺大學計算機學院 All rights reserved. 作者:張明明 完成日期:2016年12月31日 版本號:v1.

2-路歸併排序(C程式碼)及其時間複雜度的具體分析

時間複雜度:        這是一個遞推公式(Recurrence),我們需要消去等號右側的T(n),把T(n)寫成n的函式。其實符合一定條件的Recurrence的展開有數學公式可以套,這裡我們略去嚴格的數學證明,只是從直觀上看一下這個遞推公式的結果。當n=1時可以設T(1)=c1,當n>1

C++關於程式碼重用的那些事

    C++的另一個目標是促進程式碼重用。公有繼承是實現這種目標的機制之一,但並不是唯一的機制。還可以使用這樣的類成員:本身是另一個類的物件,這種方法稱為包含、組合或層次化。另一種方法是使用私有繼承或保護繼承。類模板是另一種重用程式碼的方法,類模板使我們能夠使