C++中public,protected,private访问小结

本文详细解析了C++中private、public、protected三种访问修饰符的作用范围,以及它们在类继承过程中的行为变化。同时介绍了不同继承方式(private、protected、public)对父类成员可见性的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一:private,public,protected方法的访问范围.
private: 只能由该类中的方法访问,不能被该类的对象访问.
protected: 可以被该类中的方法和其友元函数访问,但不能被该类的对象访问
public: 可以被该类中的方法和其友元函数访问,也可以由该类的对象访问
第二:类的继承后方法属性变化:
使用private继承,父类的所有方法在子类中变为private;
使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
使用public继承,父类中的方法属性不发生改变;

protected继承和private继承能降低访问权限。

 

再次提到:可以提供访问行为的主语为"函数"

类体内的访问没有访问限制一说。即private函数可以访问public/protected/private成员函数或数据成员

同理,protected函数,public函数也可以任意访问该类体内定义的成员。

public继承下,基类中的public和protected成员继承了为该类的public和protected成员(成员函数或数据成员),然后访问依然按类内的无限制访问。

#include<iostream>
using namespace std;

class C{
public:
C(int val):m_c(val){}
private:
 int m_c;
};

class D:public C{
public:
D(int val1, int val2):C(val1),m_d(val2){}
int m_d;
};

int main()
{
 cout<<sizeof(C)<<" "<<sizeof(D)<<endl;  //4  8
D obj(2,25);
cout<<&obj<<" "<<&obj.m_d<<endl; //0x0012FF78  0x0012FF7C
//cout<<obj.m_c;   //error, 不能访问

D *ptr=&obj;
int *iptr=(int *)ptr;
cout<<*iptr<<" "<<*(iptr+1)<<endl; // 2   25
return 0;
}

同样,假如虚函数,可以看到VC编译器将vptr放置在数据区的最开头。

转自:http://wenku.baidu.com/view/ce21e1d73186bceb19e8bbe3.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值