c++ 面试题
2015-09-08 22:22
489 查看
最近由于想换工作又看了看c++面试题,在这里总结一下:
1、构造析构
c++ 构造析构函数一看会考生成顺序
构造函数的顺序是,先运行基类构造函数,再初始化成员变量,再运行自身构造函数。
析构函数的顺序是,先运行自身析构函数,再释放成员变量,再运行基类析构函数。
成员变量的初始化顺序由书写顺序由上而下。
多继承由左至右,优先虚继承
A
A
A
B
A
A
B
A
C
~C
~A
~B
~A
~A
~B
~A
~A
~A
还有一种是讨论拷贝构造函数与运算符重载关系的
1
3是调用了拷贝构造函数
输出为
1
2
只有在变量声明后再赋值才会调用重载的=函数,否则调用拷贝构造函数
1、构造析构
c++ 构造析构函数一看会考生成顺序
构造函数的顺序是,先运行基类构造函数,再初始化成员变量,再运行自身构造函数。
析构函数的顺序是,先运行自身析构函数,再释放成员变量,再运行基类析构函数。
成员变量的初始化顺序由书写顺序由上而下。
多继承由左至右,优先虚继承
#include "stdafx.h" #include <iostream> using namespace std; class A { public: A(){ cout<<"A"<<endl;} virtual ~A(){ cout<<"~A"<<endl; } }; class B: public A { public: B(){ cout<<"B"<<endl;} ~B() {cout<<"~B"<<endl; } private: A a; }; class C: public A, public B //类在派生表中的继承列表 { public: C() {cout<<"C"<<endl;} ~C() {cout<<"~C"<<endl; } private: B b; public: A a; }; int _tmain(int argc, _TCHAR* argv[]) { C * p = new C; delete p; system("PAUSE"); return 0; }上面代码输出为
A
A
A
B
A
A
B
A
C
~C
~A
~B
~A
~A
~B
~A
~A
~A
还有一种是讨论拷贝构造函数与运算符重载关系的
#include "stdafx.h" #include <iostream> using namespace std; class A { public: A(){ cout<<"1"<<endl;} A(int n){cout<<"2"<<endl;} A (const A &){cout<<"3"<<endl; } private: int n; }; int _tmain(int argc, _TCHAR* argv[]) { A a; A b = a; system("PAUSE"); return 0; }以上输出为
1
3是调用了拷贝构造函数
int _tmain(int argc, _TCHAR* argv[]) { A a; A b = 1; system("PAUSE"); return 0; }
输出为
1
2
只有在变量声明后再赋值才会调用重载的=函数,否则调用拷贝构造函数
相关文章推荐
- 模拟ATM机(缺少文件操作部分,不能实现真正意义上的存储)
- 某点处的导函数值+c语言
- C++ nontrival class 值传递的机制。
- C++ nontrival class 值传递的机制。
- 项目7.3 计算一周工资
- C++名字空间
- 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
- [C++基础]goto的用法
- 项目7.2三数最大值
- C/C++易错难点笔记03
- C++中字符串与数字相互转换
- 《C++primer(第五版)》学习之路-第六章:函数
- 黑马程序员-c语言回顾-基础语法
- C++ Primer中Sales_item.h代码解析
- cassandra cpp driver 2.1 阅读摘要
- C++ 命名建议
- C++11系列学习之七---------初始化列表
- C++枚举类型
- C++之容器---vector
- 牛客面试常考算法题精讲部分题目c/c++代码