C++ 虚函数 参数默认值
来源:互联网 发布:mac jenkins 开机启动 编辑:程序博客网 时间:2024/05/13 16:35
参考资料
此题目源自网易笔试。
#include <iostream>
using namespace std;
class Base{
public:
Base(){}
Base(bool arg){
foo(); // base42
}
virtual void foo(int i = 42) {
cout << "base" << i << endl;
}
};
class Derived: public Base{
public:
Derived(){}
Derived(bool arg):Base(arg){
foo(); // derive12
}
virtual void foo(int i = 12) {
cout << "derived" << i << endl;
}
};
void test1(){
Derived d;
Base &b1 = d;
Base b2 = d;
b1.foo(); // derived42
b2.foo(); // base42
}
void test2(){
Base *b = new Derived(true); // base42 derived12
delete b;
}
int main() {
test1();
test2();
}
test1结果:
derived42
base42
原因:b1是d的引用,b1.foo()调用的是Derived的foo,因为b1类型是Base&,编译时决定了其foo的参数的默认值为Base的foo的参数默认值,所以b1.foo打印derived42;
Base b2 = d;调用Base的复制构造函数构造了出了b2,因此b2是Base对象,b2.foo()调用Base的foo方法,打印base42;
test2结果:
base42
derived12
new Derived(true)调用Derive(bool arg)构造函数,在执行前,调用Base(bool arg)方法,后者调用Base的foo方法,打印出base42;回到Derive(bool arg)的执行,调用Derived的foo方法,此时参数默认值为12,foo打印出derived12;
- 虚函数参数的默认值
- C++ 虚函数 参数默认值
- C和C++__带默认值参数的函数说明
- C和C++__带默认值参数的函数说明
- 函数参数的默认值
- 函数参数默认值定义
- java函数参数默认值
- 函数的参数默认值
- java函数参数默认值
- java函数参数默认值
- python函数参数默认值
- 函数参数默认值设置
- 【C++】参数的默认值
- C++虚函数(2) - 虚函数中的参数默认值
- 关于函数参数的默认值
- C++ 函数参数的默认值
- C++函数参数取默认值
- C++函数参数取默认值
- OC 字符串
- 嵌入式linux内核配置和编译
- 决战2015校招
- python2编码。。感觉很奇怪的问题。。
- 猜数字c#
- C++ 虚函数 参数默认值
- 求两个数组的交集
- iOS UITableViewCell 几个方法的优先级
- HDOJ 1053 Entropy 哈夫曼编码
- 域名转换IP的一种实现方法
- 数据结构(C++版)王红梅、胡明、王涛编著(第二版) 随章笔记之绪论
- Hibernate映射解析——七种映射关系
- HDOJ 2527 Safe Or Unsafe 哈夫曼编码
- iOS 卖票中多线程分析;