第一: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