C++虚函数的默认参数问题

#include "stdafx.h"
#include <iostream>
#include <algorithm>
using namespace std;

class Base
{
public:
	Base(int i):m_num(i)
	{
		cout<<"Base Constructor"<<endl;
	}
	virtual ~Base()
	{
		cout<<"Base Deconstructor"<<endl;
	}

	virtual void func(int num=-100)
	{
		cout<<num<<endl;
		cout<<"This is Base class"<<endl;
	}
private:
	int m_num;
};

class Derived:public Base
{
public:
	Derived():Base(10)
	{
		cout<<"Derived constructor"<<endl;
	}
	~Derived()
	{
		cout<<"Derived deconstructor"<<endl;
	}
	void func(int num=100)
	{
		cout<<num<<endl;
		cout<<"This is Derived class"<<endl;
	}
};

int main()
{
	{
		Base* pb=new Derived();
		cout<<"-------------------------"<<endl;
		pb->func();
		cout<<"-------------------------"<<endl;
		Derived* pd=dynamic_cast<Derived*>(pb);
		pd->func();
		cout<<"-------------------------"<<endl;

		delete pb;
	}

	system("pause");
	return 0;
}

总结:

虚函数的默认参数,与调用该虚函数的指针类型对应

C++虚函数的默认参数问题,布布扣,bubuko.com

时间: 2024-10-20 20:07:05

C++虚函数的默认参数问题的相关文章

C++虚函数与默认参数

假设有如下类: 1 class Base { 2 public: 3 virtual void disp(int x = 3) {//虚函数带默认参数值,3 4 cout << "Base::x is " << x << endl; 5 } 6 }; 7 class Derived: public Base { 8 public: 9 virtual void disp(int x = 100) {//子类重定义了默认参数值,100 10 cout

没有躲过的坑--C++函数的默认参数(重新定义默认参数)

默认参数指的是当函数调用中省略了实参时,自动使用一个值. 这里首先需要注意的是: 对于带参数列表的函数,必须从右向左添加默认值. 也就是说,要为某个参数设置默认值,则必须为它右边的所有参数提供默认值. 今天遇到的坑儿,就是函数使用默认参数,并且函数的声明和定义是分开的. char* left(const char* str, int n=1); int main() { } char* left(const char* str, int n = 1)//错误 { } 上面代码可以有两种修改: 1

C++函数:默认参数的函数

1.默认参数的目的 C++可以给函数定义默认参数值.通常,调用函数时,要为函数的每个参数给定对应的实参.例如: void delay(int loops); //函数声明 void delay(int loops) //函数定义 { if(100ps==0) return; for(int i=0;i<loops,i++); } 无论何时调用delay()函数,都必须给loops传一个值以确定时间.但有时需要用相同的实参反复调用delay()函数.C++可以给参数定义默认值.如果将delay(

从汇编看c++函数的默认参数

在c++中,可以为函数提供默认参数,这样,在调用函数的时候,如果不提供参数,编译器将为函数提供参数的默认值.下面从汇编看其原理. 下面是c++源码: int add(int a = 1, int b = 2) {//参数a b有默认值 return a + b; } int main() { int c= add();//不提供参数 } 下面是mian函数里面的汇编码: ; 4 : int main() { push ebp mov ebp, esp push ecx;为局部变量c分配了4字节的

PHP_零基础学php_3PHP函数、传参函数、默认参数、函数返回值

<?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo "<br />"; echo "<hr />"; } say_hello();//函数调用 function say_helloS($some_name)//有参数 { echo "hello,".$some_name; echo

JavaScript函数的默认参数(default parameter)

JavaScript函数的默认参数(default parameter) js函数参数的默认值都是undefined, ES5里,不支持直接在形参里写默认值.所以,要设置默认值,就要检测参数是否为undefined,按需求赋值. function multiply(a, b) { b = typeof b !== 'undefined' ? b : 1; return a*b; } multiply(5); // 5 multiply(5, 0); // 0 上面是MDN的相关例子,是比较严谨的

Python函数的默认参数的设计【原创】

在Python教程里,针对默认参数,给了一个“重要警告”的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 默认值只会执行一次,也没说原因.会打印出结果: [1] [1, 2] [1, 2, 3] 因为学的第一门语言是Ruby,所以感觉有些奇怪. 但肯定的是方法f一定储存了变量L. 准备知识:指针 p指向不可变对象,比如数字.则相当于p指针指向了不同的内存地址. p指向的是可变对象,比如lis

Effective C++ .37 virtual函数中默认参数的表现

#include <iostream> #include <cstdlib> using namespace std; class Pen { public: virtual void write(int color = 0) { cout<<"write with color:"<<color<<endl; } }; class Pencil : public Pen{ public: void write(int colo

内联函数、默认参数和函数占位参数

内联函数 定义:内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质.内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处.编译时,类似宏替换,使用函数体替换调用处的函数名.一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理. C++中的const常量可以替代宏常数定义,如: const int A = 3; ? #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以避免宏的副作用!) C++