不能仅仅通过返回类型不同来重载函数。
当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。 作者:no.body 链接:https://www.zhihu.com/question/19801131/answer/27459821 来源:知乎
//回调函数
int DoubleF(int a)
{
return a * 2;
}
int FourF(int a)
{
return a * 4;
}
int GetNumber(int k,int (*func)(int))
{
return (func(k));
}
int main()
{
int result1 = GetNumber(1,DoubleF);
int result2 = GetNumber(2, DoubleF);
std::cout << result1 << std::endl;
std::cout << result2 << std::endl;
}
输出结果:
指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。 声明格式为:*类型标识符 函数名(参数表)
int * func_sum(int n)
1. 类成员中存在非静态常量或者引用类型,只能使用列表初始化
2. 成员变量没有默认初始化函数时,比如自定义的类,同样只能使用列表初始化。
3. 提高效率。
因为对于非内置类型,少了一次调用默认构造函数的过程。
array与数组最大的区别是array是一种容器类型,它支持一系列容器操作,但是它和数组更接近,很多通用的容器操作它却不支持,因此在这里和数组来比较。
下面从容器的角度来看array和其他容器的区别。
1. 不支持局部拷贝
例如不允许C c(b, e);//将迭代器b和e之间的元素拷贝到c。不允许用C1={a,b,c...};用列表中的元素替换C1
2.不允许添加或删除元素,因为array是固定大小的。
相比于数组,array可以使用成员函数。其中包括:
1.可以使用拷贝和赋值,只要保证类型一致即可
2.使用swap函数,a.swap(b);或者swap(a,b);交换两者的元素
3.使用正向和反向迭代器
array是数组的升级版,将数组正式纳入到容器的范畴。array在使用和性能上都要强于内置数组,对于一些固定大小的使用场景,可以用array来替代原先数组的工作。
从两个函数的用途可以发现,容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。
而reserve()函数预分配出的空间没有被初始化,所以不可访问。
https://www.cnblogs.com/chengxuyuancc/p/3233124.html
1. 头文件
class String
{
public:
String();
String(const char *);
String(const String &);
String(String &&); //新加的move构造函数
~String();
String& operator=(const char *);
String& operator=(const String &);
bool operator==(const char *);
bool operator==(const String &);
char &operator[](int);
String operator+(const char *);
String operator+(const char);
String operator+(const String &);
String &operator +=(const char *);
String &operator +=(const char);
String &operator +=(const String &);
int size(){return _size;}
char *c_str(){return _string;}
friend istream &operator>>(istream &cin, String &str);
private:
int _size;
char *_string;
};
2. 源文件
String::String(const char *str)
{
if (!str)
{
_size = 0;
_string = NULL;
}
else
{
_size = strlen(str);
_string = new char[_size + 1];
strcpy(_string, str);
_string[_size] = 0;
}
}
String::~String()
{
if (_string)
delete _string;
cout << "~String() call" << endl;
}
String::String(const String &str)
{
if (!str._size)
{
_size = 0;
_string = NULL;
}
else
{
_size = str._size;
_string = new char[_size + 1];
strcpy(_string, str._string);
_string[_size] = 0;
}
}
String String::operator+(const String &str)
{
assert(_string && str._string);
String str_temp(*this);
str_temp += str;
return std::move(str_temp);
}
String::String(String && str)
{
_size = str._size;
_string = str._string;
str._string = NULL;
}
istream &operator>>(istream &cin, String &str)
{
const int limit_string_size = 4096;
str._string = new char[limit_string_size];
cin >> setw(limit_string_size) >> str._string;
str._size = strlen(str._string);
return cin;
}
ostream &operator<<(ostream &cout, String &str)
{
return cout << str.c_str();
}
1.栈实现队列:思路是有两个栈,一个用来放数据(数据栈),一个用来辅助(辅助栈)。数据添加时,会依次压人栈,取数据时肯定会取栈顶元素,但我们想模拟队列的先进先出,所以就得取栈底元素,那么辅助栈就派上用场了,把数据栈的元素依次弹出到辅助栈,但保留最后一个元素,最后数据栈就剩下了最后一个元素,直接把元素返回,这时数据栈已经没有了数据。最后呢,把辅助栈的元素依次压人数据栈,这样,我们成功取到了栈底元素。
2.队列实现栈
思路同上:有数据队列和辅助队列,模拟栈的先进后出,队列是队尾进队头出,也就是说每次取值要取队列的队尾元素,数据队列出队到辅助队列,留下最后一个元素返回,辅助队列再把元素出队到数据队列
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。