关闭

C++笔记(转)

标签: c++vectorconstructoriteratorcastingdelete
1364人阅读 评论(0) 收藏 举报

c++中所有的class都为public的,者与java是不一样的
在同一个类中是可以访问同类对象的私有成员的

构造函数初始化:(不要在头文件中这样写)
Person::Person():name("Jack"),age(30)
{

 ...

}

在函数定义前进行初始化

在局部函数中定义对象,分配堆空间,必须delete才会调用改对象的deconstructor
在函数中返回一个对象,最好使用全局对象或者堆空间创建的对象,如果是局部对象则紧紧是copy
光A()就相当于调用A类的构造函数用于构造一个临时对象
一下两种创建类对象是不一样的
1.先构造,在赋值操作
A a;
a=A();

2.仅是a对象的构造,后面的赋值语句没有任何意义,不进行相关操作
A a=A();
如果生成的数组对象,每个数组变量所调用的构造函数不一样,则不能在最后deconstructor之后
类似这种方法:delete []a;

protect 修饰符能被类内部使用,可以被子类内部使用
继承后的私有属性在子类还是存在的,可以通过方法进行操作,在内存中实际是存在的,只是内部类,外部不能进行直接调用

c++中继承时,可以根据修饰符进行修饰,这样对子类的可见度有所区别

c++子类中覆盖了父类的一个方法,可以用namespace修饰才可以访问

派生类使用using方法对以上问题进行解决,using并且解决了父类函数重载的函数

在生成子类的对象时,如果父类覆盖了默认的构造函数,则子类必须调用父类的覆盖后的构造函数,否则
会父类构造函数不能被调用,则子类对象不能生成

对象指针转换,如果是down casting则会出现narrow现象,转换可能不成功

只要类中有一个函数是虚函数,则其析构函数一定要修饰为虚函数!

如果设计的类以后会派生出子类,则最好都写成virtual函数

在子类中重写父类的函数,但不允许将其返回值类型进行改变!

纯虚函数就想是java中的抽象类,以及接口

c++如果继承抽象类,但没有实现所有的函数,则改类不能产生对象

派生类最后要继承于公共基类
class :virtual public student,public teacher
{

}

如果子类需要访问父类的方法,则需要加上namespace :: 方法

如果在类的方法中传入的参数是改类的父类对象,如果去直接调用改父类的数据成员(protect,private)是不允许的,但如果传入的就是改类本身的对象是可以的

cout<<是支持缓冲的

fread /fwrite 是c语言本身的功能
read / write 是操作系统的功能

ostream类中的write是二进制的


如果类中申明某个类为friend,那该类可以使用其类中的所有数据,包括private数据
友元关系仅在互相声明的类中,对继承之后的关系是不继承其父类的友元

友元无可继承性

在类中构造常量必须在构造列表中进行赋值如A():a(0)

常函数不会修改类中的数据成员的状态

在类内部是能使用static数据的,但前提初始化必须在外部进行

在static函数中是不能使用static的成员变量的,原因因为在对象都没有建立起来的时候,其成员变量肯定不可能被生成。

只有static const int a=100;是也不可以在类中直接定义的,同样在外部进行初始化

在类中是不能初始化任何变量的

c++中有一个默认的copy构造函数,但是是一个浅拷贝

重载了默认构造函数则会完全覆盖默认构造函数所作的基本类行的拷贝

写赋值操作重载,最好防止自己赋值自己,从而导致对象自己本身数据丢失的错误,故先作判断
if(this==&s)

A o3=o2;所执行的为拷贝构造函数,因为o3还没有建立起来
A o3;o3已经建立起来,所以最后调用的是操作符重载
o3=o2;

带const可以使得const和非const的参数都传入,原因是常量可以当一个变量看,但反之则不行

作为友元的双目运算符 模板 : T operator +(A &a1,A & a2)


++a A& operator ++()
a++ A operator ++(int dummy)
a++的实现
{
 A * tmp=this;
 其中数据:
 a++,b++;
 return this;

}

constructor
deconstructor
copy constructor
operator =

operator = 只能当成员函数重载
operator []只能当成员函数重载
重载中多维数组必须用(10,22)

"/":
实部:(ac+bd)/(c*c+d*d)
虚部:(bc-ad)/(c*c+d*d)
"*":
实部:ac-bd
虚部:ad+bc
"+":
实部:a+c
虚部:b+d
"-"
实部:a-c
虚部:b-d

对象序列化的简单方法,只要把对象强制类型转换成(char*)write和read即可

{
cin.peek()意思?
cin.putback()?
然后看cin.cc


}

vector 既可以使用下标进行遍历,也可以使用iterator进行遍历
set map 经常使用

在vector中存放对象时,对象一定要有默认构造函数,要支持拷贝构造函数,支持重载赋值操作

如果键值只能是唯一的,则可以用set,反之则可以用multiset

lowerbound只找到multiset中的第一个找到的set
upperbound则找到multiset中的最后一个找到的set
set与vector不同点前者根据顺序排放,后者则全部排序之后存放
容器中再放容器需要注意空格,如:vector < list<int> >
模板
template <class T>
void FunA(Array<T>&)
只要一个类方法为virtual,则析构函数就声明为virtual
析构函数可以显示调用

在类中声明的static变量在外面必须显示初始化

 

 

 

 

 

 

{
queue与vector,list有是么差别
在string前加一个大的S有何作用?
__box有何作用?

}

map以及mulitmap,如果使用iterator比如p,如果使用p->first指代的则是key,p->second指代的是value

往一个容器中存放的对象必须有正确地拷贝构造函数(如果想要深拷贝则自己重写否则有默认的拷贝构造函数),必须有没参数的构造函数,另外存放在有排序的容器比如list中则必须重载>,<,==操作符

 

java -cp target/classes:lib/jpox-enhancer-1.0.3.jar:lib/jdo.jar:lib/jpox-1.0.3.jar:lib/log4j-1.2.8.jar:lib/bcel-5.1.jar org.jpox.enhancer.JPOXEnhancer target/classes/org/jpox/tutorial/package.jdo

 

  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62139次
    • 积分:922
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:3篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论
    vs资源