C++类的公有/私有继承,基类的私有成员在派生类中访问情况

简介: C++类的公有/私有继承,基类的私有成员在派生类中访问情况

首先,基类的私有成员是会被派生类继承的,但是不能被派生类访问;从物理上讲是复制过来了,在内存中确实有复制。但是从程序上看是被屏蔽了,不能直接调用。


其次,对于基类public类型的成员变量,无论是公有继承还是私有继承,都可以直接在派生类中定义的成员函数直接访问。

对于基类private类型的成员变量,无论是公有继承还是私有继承,在派生类中定义的成员函数都不能直接访问基类的私有成员,只能通过基类的public或protect成员函数访问。


#include<iostream>
using namespace std;
class A
{
private :
int a;
public :
//构造函数,默认将a赋值为2;
A()
{
a = 2;
}
//获得私有成员a的值
int getNum()
{
return a;
}
};
class B : private A
{
public:
//因为是私有继承,无法访问基类的公有成员函数,
//只能自定义一个成员函数来访问该类B从基类A继承下来的属性。
int get()
{
return getNum();//getNum函数是从基类私有继承下来的私有函数。
}
};
int main()
{
B b;
cout<<b.get()<<endl;
}


相关文章
|
16天前
|
存储 Java 程序员
【c++】继承深度解剖
【c++】继承深度解剖
14 1
|
24天前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `&lt;`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。
|
24天前
|
存储 编译器 数据安全/隐私保护
|
3天前
|
Java C++
什么是类的继承?C++中有哪些继承方式
什么是类的继承?C++中有哪些继承方式?
5 0
|
24天前
|
C++
【C++】string类的使用④(常量成员Member constants)
C++ `std::string` 的 `find_first_of`, `find_last_of`, `find_first_not_of`, `find_last_not_of` 函数分别用于从不同方向查找目标字符或子串。它们都返回匹配位置,未找到则返回 `npos`。`substr` 用于提取子字符串,`compare` 则提供更灵活的字符串比较。`npos` 是一个表示最大值的常量,用于标记未找到匹配的情况。示例代码展示了这些函数的实际应用,如替换元音、分割路径、查找非字母字符等。
|
24天前
|
编译器 C++
【C++】类和对象⑤(static成员 | 友元 | 内部类 | 匿名对象)
📚 C++ 知识点概览:探索类的`static`成员、友元及应用🔍。
|
24天前
|
存储 编译器 C++
C++基础知识(六:继承)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
3天前
|
C++
什么是析构函数,它在C++类中起什么作用
什么是析构函数,它在C++类中起什么作用?
21 11
|
3天前
|
C++
能不能说一个C++类的简单示例呀?能解释一下组成部分更好了
能不能说一个C++类的简单示例呀?能解释一下组成部分更好了
27 10
|
15天前
|
设计模式 安全 编译器
【C++11】特殊类设计
【C++11】特殊类设计
37 10