c++操作笔记阅读笔记

来源:互联网 发布:淘宝网猎狐者户外用品 编辑:程序博客网 时间:2024/05/21 19:36

1、explicit关键字能用户操作符重载,但是不能用在转换函数中

应该谨慎使用转换函数,通常最好选择仅在被显示的调用时才会执行的函数。

2、c++提供了下面的类型转换

1>只有一个参数的类构造函数将用于将类型与该参数相同的值转换为类类型。例如将10赋值给Student对象时,会自动调用Student(int age)这个构造方法。不过,在构造方法声明中使用explicit可以防止隐式转换,而只允许显示转换。

2>被称为转换函数的特殊成员操作符函数,用于将类对象转换成其它类型。转换函数是类成员方法,没有返回类型,没有参数,名为operator typeName(),其中typeName是对象将被转换成的类型。将类对象赋给typeName变量或将其强制转换为typeName类型时,该函数将自动调用。

3、在操作符重载的时候,要注意一个特点:

可以提供方法定义或者友元函数的定义,但不能都提供。

4、抽象类

不用来定义对象而只作为一种基本类型用作继承的类,称为抽象类(abstract class ),由于它常用作基类,通常称为抽象基类(abstract base class )。凡是包含纯虚函数的类都是抽象类。因为纯虚函数是不能被调用的,包含纯虚函数的类是无法建立对象的。

抽象类的作用是作为一个类族的共同基类,或者说,为一个类族提供一个公共接口。一个类层次结构中当然也可不包含任何抽象类,每一层次的类都是实际可用的,可以用来建立对象的。

但是,许多好的面向对象的系统,其层次结构的顶部是一个抽象类,甚至顶部有好几层都是抽象类。

如果在抽象类所派生出的新类中对基类的所有纯虚函数进行了定义,那么这些函数就被赋予了功能,可以被调用。这个派生类就不是抽象类,而是可以用来定义对象的具体类(concrete class )。

如果在派生类中没有对所有纯虚函数进行定义,则此派生类仍然是抽象类,不能用来定义对象。虽然抽象类不能定义对象(或者说抽象类不能实例化),但是可以定义指向抽象类数据的指针变量。当派生类成为具体类之后,就可以用这种指针指向派生类对象,然后通过该指针调用虚函数,实现多态性的操作。

5、C++中的异常处理类

stdexcept.h文件中

6、抽象类与虚基类的区别:

其实他们没有任何关系:抽象类是包含任何抽象函数的类,虚基类是防止多重继承时,同一条继承线上的出现多个基类。

虚基类是相对于它的派生类而言的,它本身可以是一个普通的类。
只有它的派生类虚继承它的时候,它才称作虚基类,如果没有虚继承的话,就称为基类。比如类B虚继承于类A,那类A就称作类B的虚基类,如果没有虚继承,那类B就只是类A的基类。
虚继承主要用于一个类继承多个类的情况,避免重复继承同一个类两次或多次。
例如 由类A派生类B和类C,类D又同时继承类B和类C,这时候类D就要用虚继承的方式避免重复继承类A两次。
而抽象类是指带有有一个或一个以上的纯虚函数的类。抽象类一般值用于继承,不能定义类对象,但可以定义类指针和引用。

7、string.h与string有什么区别:

两者没有任何关系!

 <string.h>是旧的C 头文件,对应的是基于char*的字符串处理函数; <string> 
是包装了std 的C++头文件,对应的是新的string 类(看下文); <cstring>是对 
应于旧C 头文件的std 版本。如果能掌握这些(我相信你能),其余的也就容易 
了。

8、c风格的字符串与c++风格的字符串区别:

1、功能上的区别:string版本的getline()将自动调整目标string对象的大小,使之刚好能够存储输入的内容
//输入方式:
char  info[100];
cin >> info;
cin.getline(info,100);
cin.get(info,100);
string stuff;
cin >> stuff;
getline(cin,stuff);
2、在设计上面的区别:读取c风格的字符串函数式istream里面的方法,而string是独立的对象。所以读取c风格的字符串cin是调用对象,而读取string的时候,cin是参数。

c++风格的字符串转换成c语言风格的字符串方式string.c_str();


0 0