第一友元函数访问私有元素时不会显示,但是是可以调用的(我使用的是gcc10.3版本的)友元函数可以访问任何元素。就是语法你别写错了。
继承如果父类已经写了构造函数,子类一定要赋值给构造函数,要么父类就别写,让编译器自己搞默认值。父类已经比如说int a在父类已经赋值了20,子类也是20。子类不能直接使用私有的,但是可以调用父类的方法。public:子类和父类一一对应,父类的protected与子类的public和protected对应,private:基类公有成员,子类中继承为自己的私有成员,在派生类可以访问,在外部不可以访问。基类保护成员,子类中继承为自己的私有成员,在派生类可以访问,在外部不可以访问。基类私有成员,子类一样不可以访问基类的私有成员,
运算符重载:friend ostream & operator<<( ostream & os,const hj & c);friend 这个字符一定要加上不然出错,这个是重载输出运算符的,ostream &后面接个表名,然后接某个类,意思是这个类的对象输出是你想输出的
比如说
ostream& operator<<(ostream & os,const hj & c)
{
os<<"sb";
return os;
}
hj j(1,2);
cout<<j;在运行这个时就会输出sb这个字符串
接下来就是跟堆紧密相关,如果是Java就直接new对象(因为Java虚拟机有垃圾回收器)就可以了,而在c++里面就要自己设计函数回收,不能直接new对象,因为new的对象只是堆里面的浅复制。
什么叫浅复制?就是你new的两个string对象(这两个值相同)指向同一个堆里面地方,就是你只是复制了那个对象的地址,并不会从新开辟一块空间,当你销毁一个对象时会把堆里面的那一块地方也销毁了,那你另一个就成空指针了。你们可能说,不销毁堆里面的空间不就没事了?不这解决不了问题,两个指针指向同一个地方,倘若我两个指针做不同的操作,岂不是会互斥。
声明指向堆中值的指针数据成员
声明与定义析构函数
声明与定义拷贝构造函数
这三个明天再说。(哎,我一打代码,他们就跟风,就那么喜欢跟我卷)
指针这个东西在c++里面可以说是很强大的。它可以快速的定位,只要你有地址,指针就可以指向你那个地方,并且修改里面的值。这就是为什么ce喜欢搞指针来做wai gua(这个我不说)