1.protected成员
class base
{
protected:
int int_pro;
};
class A : public base
{
public:
A(int da) {int_pro=da;}//
void print(A &obj){obj.int_pro = 23;}//
void printpro(base &obj){obj.int_pro=5;}//
};
2.
class design{
public:
adsHashTable * adsGetTable() {return _ppp;}
void adsSetTable(adsHashTable * temp) {_ppp=temp;}
...
private:
adsHashTable * _ppp;
}
design _de;
adsHashTable *ne_w = _de->adsGetTable();
ne_w=new adsHashTable(100);
_de->adsSetTable(ne_w);
3.关于继承和派生的理解
按访问方式分为两种:1.在子类内部访问父类成员;2.通过类对象访问内部成员
对1而言:不管何种继承方式(public,protected,private),在子类中都可以访问父类的public,protected成员,不能访问private成员
对2而言:继承之后,子类拥有父类所有成员变量,并且外加自己特有的变量。访问规则是,通过对象只能访问public成员。不同的继承方式导致继承自父类的成员变量的访问级别发生变化。public继承,父类成员变量访问级别在子类中不改变;protected继承,父类的public变量在子类变成protected的,其他不变;private继承,父类的public,protected变量在子类变成private;
4.构造函数:深拷贝和浅拷贝
通常的赋值以及默认拷贝构造函数都是浅拷贝(有动态成员变量时,出问题,所以需要深拷贝)
深拷贝就是调用拷贝构造函数时,对动态成员变量重新分配空间。
class A{ class B{
private: private:
int* p; int* p;
public: public:
A(){p=new int(100);} B(const B& t){p=new int(100); *p=*(t.p);}
} }
A a1(a2); B b1(b2);
A:a1的p指向的是a2的p所指的内存,即a1.p和a2.p指向同一块。
B:b1的p指向一段内存,b2指向另一段内存,然后拷贝就是把b2内存中的内容复制到b1所指向的内存里面。
5.