您的位置:首页 > 编程语言 > C语言/C++

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

2013-03-14 10:11 169 查看
第一: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: