关于对象(类)相关的知识点

来源:互联网 发布:web前端好还是java好 编辑:程序博客网 时间:2024/05/29 03:19

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.


原创粉丝点击