1.c和c++中struct的区别?
在c++中,struct已经和类十分的相似了,struct具有继承,可以存在成员函数,具有访问控制权限的设置.而c语言中,struct中是不可以有成员函数的,但是可以存在成员指针.是否访问控制权限,是否可以有成员函数。
2.c++中如何struct和class的区别?
C++中class和struct是十分相似的类型,两者具有继承,访问控制权限的设置等功能.区别仅仅在于访问控制权限的默认值上.在数据成员方面,class的默认方式是private,而struct的默认方式是public.在继承方面,class的默认继承方式是private,而struct的默认继承方式是public。除此之外,class和struct就是一样的.
访问控制权限
| 类别 | 可访问范围 |
|---|---|
| public | 所有类都可以访问 |
| protected | 类自身以及派生类 |
| private | 类自身 |
3.如何判断程序是以c++还是c语言的方式编译的
在c++中,有一个宏定义_cplusplus,
#ifdef _cplusplus
代码 C++执行的代码
#else
代码 C语言执行的代码
#endif
在c和c++混合编程的时候,可能会使用到,_cplusplus和extern
4.c和c++的区别?
c语言是面向过程的语言,他的核心是函数。
c++是面向对象的语言,他的核心是类和对象
c++是c语言的超集,
5.判断下面代码中那些函数是虚函数.?
class A
{
virtual void func1();
void func2();
}
class B: class A{
void func1(){cout << "h";}
virtual void func2(){cout << "o"}
}
A中的func1是虚函数,B中的func1也是虚函数
B中的func2是虚函数.
5.1 C++中虚函数的作用是什么
在C++中,虚函数的主要作用是实现多态(polymorphism)。多态允许你使用一个接口来表示不同的类型,从而使得代码更加通用和灵活。以下是虚函数的关键特点和作用:
- 动态绑定(动态联编):虚函数使得在运行时能够根据对象的实际类型来决定调用哪个函数实现。这意味着,即使通过基类的指针或引用来调用函数,如果该函数是虚函数,实际执行的是该指针或引用所指向的对象的实际类型所定义的函数版本。
- 实现多态性:基类中定义的虚函数可以在派生类中被重写(override),这样派生类就可以提供自己特有的实现。这种机制使得程序设计者能够编写出不依赖于具体类的代码,提高了代码的可复用性和扩展性。
- 虚函数表:编译器为含有虚函数的每个类自动生成一个虚函数表(vtable),这个表中包含了该类所有虚函数的地址。每个对象实例中都有一个指向相应虚函数表的指针(称为vptr)。当通过基类指针或引用来调用虚函数时,实际上是在查找这个表来确定应调用的具体函数。
- 支持抽象类和接口:纯虚函数(在基类中声明为 virtual 函数名() = 0)不提供实现,并且要求任何派生类必须提供其实现。含有纯虚函数的类称为抽象类,不能被直接实例化,促使派生类遵循某种接口规范。
综上所述,虚函数是C++中实现面向对象编程中多态特性的核心机制,它增强了代码的灵活性和可维护性。
6.int id[sizeof(unsigned long)];这个对吗?为什么?
数组的大小必须在编译时候就是确定的,sizeof()是一个运算符,这个值也是确定的.正如int id[5+6]一样,是正确的.
7.静态全局变量的作用域是?
静态全局变量的的作用域是本文件中,相对于全局变量和局部变量,比较中庸。
7.1 是什么是命名空间作用域?
命名空间作用域是C++中一种重要的概念,用于组织代码中的标识符(如变量、函数、类等),以避免它们之间的命名冲突,并提供更清晰的作用域管理。命名空间通过关键字namespace来定义,允许程序员创建自己的作用域层次结构。
8.c++中函数参数传递有几种类型?
3种,值传递,指针地址传递,引用传递.
9.对于一个平凡使用的短小函数,在c语言中应用什么来实现,在c++中使用什么来实现.
c中使用宏定义(注意添加括号)(c语言中没有内联函数),c++中使用内联函数来实现.
10. 引用和指针的区别
(1)引用必须初始化,指针不需要
(2)引用的值不可以改变,指针可以改变
(3)不存在空的引用,但存在空的指针
(4)不存在引用的引用,但是存在指针的指针
11.c++中的关键字virtual和inline的含义是什么?
virtual使用来修饰类中的成员函数,说明这是一个虚函数.
虚函数的作用是派生类中重新定义基类的方法,在基类中将该方法设置成虚方法,这样就可以启用动态联编. (1)静态联编:在程序编译的时候,就确定了,需要调用那一个方法.(2)动态联编:在程序执行的时候,才能确定调用哪一个方法.
纯虚函数是指没有函数实现,且定义为“=0”,例如 virtual fun() = 0;
inline是声明为内联函数的.目的是为了提高函数的运行效率,减少上下文的过度。
12.在Vs&Vc 中,编译工具栏中Debug和Release选项是什么含义?
Debug是调试模式,给出的调试信息较多,可以进行断点调试,代码大小和速度没有优化。
Release是发行模式,给出的调试信息较少,无法进行断点调试,代码大小和速度都是最优的。
13.为什么在C中有malloc和free,在c++中还要添加new和delete呢?
首先,malloc和free是库函数,而new和delete是运算符.
在c++中使用了对象之后,对象的建立需要执行构造函数,销毁需要执行析构函数,库函数不再编译器的控制之中,所以不能升任工作.
14.如果在申请动态内存时找不到足够大的内存块,将怎么办?,宣告内存申请失败。你是怎么处理内存耗尽的?
判断malloc和new返回的指针,如果指针为NULL,则马上return终止程序
15.c++是不是类型安全的语言?
类型安全,不是相同类型的数据,不可以访问相同的地址。
c++不是类型安全的,但是是强类型的。
16.如何写一个程序,判断系统是32位还是64位的.
1.通过编译器的宏定义
#include <iostream>
int main() {
#if defined(_WIN32)
std::cout << "The system is 32-bit." << std::endl;
#elif defined(_WIN64)
std::cout << "The system is 64-bit." << std::endl;
#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__ppc64__))
std::cout << "The system is 64-bit." << std::endl;
#elif defined(__GNUC__) && (defined(__i386__) || defined(__ppc__))
std::cout << "The system is 32-bit." << std::endl;
#else
std::cout << "Unable to determine the system bitness." << std::endl;
#endif
return 0;
}
2.通过空指针的位宽
#include <iostream>
int main() {
if (sizeof(void*) == 4) {
std::cout << "The compiler is generating 32-bit code." << std::endl;
} else if (sizeof(void*) == 8) {
std::cout << "The compiler is generating 64-bit code." << std::endl;
} else {
std::cout << "The pointer size is neither 4 nor 8 bytes. Unable to determine the architecture." << std::endl;
}
return 0;
}
17.写一个程序,判断是16位还是32位,不可以使用sizeof
查询编译器的宏定义,根据宏定义来判断系统的位宽。
计算~0的值,如果是32位,就是65536.
18.多态类中的虚函数表是 Compile-Time ,还是Run-Time 时建立的?
虚函数表是在编译环境时候建立的,所以Complie-Time时候建立的.
19.常见的转义字符?
\a \n \ ' "
20. 若数组名作实参而指针变量作形参,函数调用实参传给形参的是()
数组第一个元素的地址.
浙公网安备 33010602011771号