c/c++常见知识点

来源:互联网 发布:java中public的翻译 编辑:程序博客网 时间:2024/06/06 13:02

1.c中struct可不可以有函数,c++中类与struct区别?

   c中结构体struct可以有函数指针,但不能有函数代码,c++中struct和类区别不大,类默认成员变量与成员函数为private,并且默认继承方式为private继承,而struct成员变量默认为public,默认继承方式为public继承。

2.c++的特点。

   这个问题为基础问题,学过c++应该都知道其特点为继承,封装,多态,继承实现了代码复用,从宏观上来说,c++的核心思想为面向对象,一切皆为对象,继承实现将事物的共性提取出来作为父类,特性则在子类中保存,这就产生了继承;封装,利用类实现了对象的封装,将其属性和方法封装到类中,同时根据其不同的属性public,protect,private,来实现数据的保护;多态,就是利用父类指针指向不同子类对象,利用虚函数实现父类指针根据不同对象动态调用子类对象的方法。

3.类的构造函数和析构函数调用顺序?

  类的构造函数初始化顺序,先调用父类构造函数再调用子类的构造函数,析构函数则相反,先构造的后析构,相当于栈的结构。

4.类中数据成员的初始化顺序?

 类中数据成员的初始化顺序与构造函数中的位置先后顺序无关,与数据在类中定义的先后顺序有关。

5.构造函数可以是虚函数?虚析构函数的作用?

  这个问题建议读者好好品读《Effective C++》,构造函数不能为虚函数,原因是,如果构造函数为虚函数时则当子类对象调用父类构造函数时,由虚函数性质,此时会动态调用子类构造函数,而此时子类相关成员变量还未初始化,此时调用子类构造函数就会出现问题,因此构造函数不能为虚函数。虚析构函数是为了当用父类指针删除一个子类的对象时,子类的析构函数会被调用,从而达到删除子类对象的目的,而不至于当析构函数并不为虚析构函数时,则会调用父类的析构函数,而并没有析构子类对象,这并不是我们所希望的,因此一般当类中存在虚函数时,析构函数都定义为虚析构函数。

6.若func()为类A的一个静态成员函数,A *pa=NULL,pa->func(),能正确调用吗?

   类中任何成员函数都可以访问静态成员,但静态成员函数只能通过对象名(或指向对象的指针)访问该对象的非静态成员,因为静态成员函数没有this指针,上式中,pa为指向类A的指针,只是它指向为空对象,因此仍能调用静态成员函数。

7.动态绑定与静态绑定的区别?

 静态绑定:程序编译过程中,把函数(方法或过程)调用与响应调用所需的代码结合的过程。

 动态绑定:在执行期间根据调用对象实际类型决定调用的方法。多态属于动态绑定。

8.四大类型转换.

  1.static_cast: 最常用的类型转换,通常有2种方式 1.void指针转换为任意类型的指针2.一般的标准转换如int转换为char类型

  2.dynamic_cast  这个就是动态转换,通常所说的多态调用虚函数使用时存在的情况。

  3.reinterpret_cast 解释转换,强制将不相关的类型进行转换,少使用这种转换。

  4.const_cast 常量指针被转化成非常量指针,并且仍然指向原来的对象;常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。

9.使用指针时应注意什么?

  使用指针注意以下几点:1.指针利用时需要初始化,防止出现指针指向内存位置不明确。2.指针赋值类型匹配 3.两指针指向同一地方。4.再次分配内存时确保内存指向不为空。

10.指针数组和数组指针的区别。

    指针数组 int *p[10]   数组名为p,其包含10个元素,并且10个元素都为指向int型的指针。

    数组指针 int (*p)[10]  p为指向数组的指针,该数组包含10个元素,后面10表明p+1则其向后移10个int数据位。

11.红黑树的性质。

   红黑树的性质如下:1.每个结点要么为红要么为黑。2.根节点都为黑3.每一个叶节点为黑的 4.如果一个节点为红则其两个子节点为黑 5.对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点。

12.哈希表如何避免冲突?

   首先说明哈希函数(映射规则)的构造方法1.数字分析法 2.平方取中法 3.分段叠加法 4.除留余数法 5 伪随机数法。

   处理冲突的方法:1.开放地址法  2.再哈希法 3.链接地址法 4建立公共溢出区。

13. 排序算法总结。

       

  今天就总结到这里,只作为个人学习总结,如存在问题,还希望大家能够指出!















0 0