1,内连函数inline 返回值类型 函数名(形参列表)普通函数成为内连函数:在普通函数声明之前加上inline成员函数成为内连函数:在类中定义的函数全部默认为内连函数,可以显示加上inline或者不加;在类中声明的函数,如果加了inline,则其为内连函数。如果没有加,但是再定义的时候加了inline,也是内连函数内置函数在编译的时候展开,直接嵌入到主调函数之中一般蒋规模很小,没有复杂控制语句的函数声明为内置函数(java里面没有内...
参考:http://www.weixueyuan.net/view/6371.html总结: virtual关键字仅用于函数声明,如果函数是在类外定义,则不需要再加上virtual关键字了。 在C++中只有类中的成员函数能被声明为虚函数,而对于顶层函数则不能声明为虚函数。 声明虚函数是为了构成多态。 实际上我们只需要将基类中的display函数通过virtual关键字声明为虚函数,之后即使在派生类中display函数声明时未加上virtual关键字,它在所有的派生类中都...
constexpr函数是指能用于常量表达式的函数。定义constexpr函数的方法有其他函数类似,不过要遵循几项约定:函数的返回值类型及所以形参的类型都是字面值类型,而且函数体中必须有且只有一条return语句。为了能在编译过程中随时展开,constexpr函数被隐式指定地指定为内联函数。 constexpr函数体内也可以包含其他语句,只要这些语句在运行时不执行任何操作就行。例如,constexpr函数中可以有空语句、类型别名以及using声明。 ...
多线程的环境里,我们总不可避免要使用锁。于是一个常见的场景就是: 1class ObjectWithLock2{3private:4 std::mutex mtx_;5 SomeResType shared_res_;6 7public:8// Constructor/Destructor 9 …
1011void OpOnSharedRes()
12 {
13 std::lock_guard<std::mutex> lock(mtx_);
1415// read/write shared resource: shared_res_16 …
17 }
18 };问题多线程环境下该如何实现拷贝构造函数和移动构造函数呢?要实现默认构造...
虚函数声明例如以下:virtual ReturnType FunctionName (Parameter)虚函数必须实现,那怕是空实现;假设不实现,编译器将报错。它的作用是为了能让其在子类里能够被重写以达到多态,当然也能够不重写。纯虚函数声明例如以下:virtual ReturnType FunctionName (Parameter) = 0;纯虚函数一定未定义,仅仅是一个函数的声明而已,纯虚函数用来规范派生类的行为,即接口。包括纯虚函数的类是抽象类,抽象类不能被实例化,仅仅有被继承并...
int vis=a.find(b):从string a开头开始查找第一个遇到的string b,返回string a中所匹配字符串的第一个字符的下标位置,找不到则返回-1.int vis=a.find_first_of(b):从string a开头开始查找第一个遇到的string b中所含有的任意一个字符,返回其在string a中的下标位置,找不到则返回-1。int vis=a.find_last_of(b):从string a末尾开始查找第一个遇到的string b中所含有的任意一个字符,返回其在string a中的下标位置,找不到则返...
干货较多-需要自己深思理解: C++支持两种多态性: 1.编译时多态性(静态绑定-早绑定) 在程序编译阶段即可以确定下来的多态性 通过使用 重载机制(重载函数)实现(模板)http://blog.csdn.net/my_business/article/details/12194691 2.运行时多态性(动态绑定-晚绑定) 必须等到程序运行时才能确定的多态性 要通过 虚函数 来实现http://blog.csdn.net/zp752963831/article/details/46635885 第一个父类中 把某个函数 定义...
函数引用操作符struct absInt
{int operator()(int val) const{cout<<val<<"<->!!!"<<endl;return val<0 ? -val : val;}
};
void fun1()
{int i=-42;absInt absObj;int ui=absObj(i);
}
Function-Object Classes with State
函数对象类的状态class PrintString
{
public:PrintString(ostream &o=cout, char c=' '):os(o), sep(c) {} //构造函数void operator()(const string &s) const {os<<">>>>-----<<<<"<<s<<sep<<"yeah!"<<e...
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<stdlib.h>
using namespace std;class Date
{
public:
Date(int year=0, int month=0, int day=0)
:_year(year)
, _month(month)
, _day(day)
{
cout << "构造函数" << endl;
} Date( const Date& d)
{
cout << "拷贝构造函数" << endl;
_year = d._year;
_month = d._month;
_day = d._d...
转载请注明出处:http://blog.csdn.net/hongkangwl/article/details/21882459关于静态链表的C实现,网上已经烂大街了,这里就不在废话了。对于本文,纯粹是本屌闲的蛋疼,如有异议,请轻喷。对于每个节点,这里也不能免俗,使用结构体实现struct staticlinklistnode
{int data;//数据int next;//下个数据的存储位置bool used;//是否放在链表中了
};静态链表的类主要仿照STL中实现了一些接口函数class staticlinklist
{
private:sta...
c++中函数的实参传递到形参的值是单向的,改变形参并不会影响实参。#include <iostream>
usingnamespace std;
void swap(int a, int b) {int t;t = a;a = b;b = t;
}
int main() {int x, y;cin>> x >> y;cout << "x=" << x << " y=" << y << endl;swap(x, y);cout << "x=" << x << " y=" << y << endl;return0;
}运行结果如下通过交换,并没有改变x,y的值,为了达到交换的目的,需要通过加&,通过地址的交换而改变x,y的值#include...
一、虚函数在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。而虚函数的作用,就是让我们在基类和派生类中调用同名函数。在程序中不是通过不同的对象名去调用不同派生层次中的同名函数,而是通过指针调用它们。举个例子: 假如我们定义了一个基类Shapeclass Shape
{public:void area...
默认参数
在函数声明中可以设置若干个默认参数,这些参数在函数调用时可以省略。例如:voidprint(inta=3,intb=4){cout<<a<<" "<<b<<endl;}print();// 3 4print(4);// 4 4print(,3);// compile error
默认参数提供了更灵活的函数声明。简化函数逻辑的同时,也提供了一种扩展既有函数的方式。
在很多情况下,函数的声明与定义是分开的。语法上讲我们可以在声明时给出默认参数, 也可以在定义时给出默认参数。然而在函数调用处,编译器...
最近这些天在重温设计模式GOF23,偶然想到友元,不使用都快忘了今天重温一下C++友元知识,学了之后几乎就没怎么用到,几乎都是与设计模式打交道的。虽然说友元能提高效率,表达清晰,但是破坏了类的封装机制,所以一般情况下不建议使用友元, 友元类简单demo:// 类A,希望把私有成员公开给类B
class A
{friend class B;// 把B设置为友元类
public:A(int i):m_i(i){}
private:int m_i;int getInt(){return 100;}
};
// 类B,希望访问...
当写下如下空类时:class Empty{};编译器处理后变成;class Empty {public:Empty() {}//默认构造函数Empty(const Empty&) {}//默认拷贝构造函数~Empty(){}//默认析构函数Empty& operator=(const Empty&) {}//默认赋值操作符};编译器产出的析构函数是一个non-virtual版本,除非这个class的base class自身声明有virtual析构函数。编译器产出copy构造函数和copy assignment操作符,只是单纯地将来源于对象的每一个non-static成员变量拷...