C++的三大特性:继承、多态、封装1、继承被继承的是父类(基类),继承出来的类是子类(派生类),子类拥有父类的所有的特性。继承方式有公有继承、私有继承,保护继承。默认是私有继承公有继承中父类的公有和保护成员在子类中不变,私有的在子类中不可访问。私有继承中父类的公有和保护成员在子类中变为私有,但私有的在子类中不可访问。保护继承中父类的公有和保护成员在子类中变为保护,但私有的在子类中不可访问。c++语言允许单...
破事水: 由于最近数据结构有个实验报告说是要对字符串进行排序,想偷个懒不想一个一个地赋值,虽然可以用strcpy和传入二级指针的形式直接写,但是这样感觉不美观漂亮。 然后就去膜了一下C++11的新特性——初始化列表,概念就不说了,就讲下这东西具体怎么用吧,就是正常的写一个构造函数,然后把参数改为initializer_list<数据类型> &t 如图所示。可以理解为传入的参数数据被放到了一个储存器t中,利用C++11的auto可以直...
静态成员变量存放于数据段,在编译时产生,故有以下特性: 静态成员变量实际为类域中的全局变量,其初始化也应与全局变量一样,不能再头文件里初始化,应与全局变量初始化的方式一样,初始化时,静态成员变量不收访问限定符限定Test.cpp:
class A
{static int _num;
};
int A::_num = 0;//初始化成功 静态成员变量被类内所有成员变量共享,也被派生类所有成员变量共享 class B :public A
{};
int main()
{A a;a._num++;B b...
语言级别的线程支持#include <iostream>#include <thread>std::thread::id main_thread_id = std::this_thread::get_id();void hello()
{std::cout << "Hello Concurrent World\n";if (main_thread_id == std::this_thread::get_id())std::cout << "This is the main thread.\n";elsestd::cout << "This is not the main thread.\n";
}void pause_thread(int n) {std::this_thread::sleep_for(std::chrono::seconds(n));std::cou...
之前写了一个博客《 浅析C++中的初始化列表(区别赋值和初始化)》,讲述了类的构造函数使用初始化列表来初始化成员变量。现在,撇开过往不谈,就谈一谈普通的变量赋值。即是我们要提到的initializer_list。这同样是一个C++11的特性。过往,我们这样给vector赋值:std::vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);需要感谢的是,C++11让你更方便。std::vector v = { 1, 2, 3, 4 };这就是所谓的ini...
C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++11方面的知识,也得益于很多其他网友的总结。本博客文章是在学习的基础上,加上博主在日常工作中的使用C++11的一些总结、经验和感悟,整理出来,分享给大家,希望对各位读者有帮助,文章中的总结可能存在很多不完整或有错误的地方,也希望读者指出。大家可以根据如下目录跳到自己需要的章节。1、关键字及新语法...
C98或C99中的库为:<cassert> 或<assert.h>运行时断言,故明思议是当程序在运行的时候才作为判决,可以认为是对参数的有效性的判断。而静态断言,是对参数的条件判断提前做了,在预编译的时候进行完成的。如://demo1.cpp
#include <cassert>usingnamespace std;char *arrayAolloc(int n){assert(n>0); returnnewchar [n];
}int main(){char * a = arrayAolloc(0);return0;
}//gcc demo1.cpp -omainassert(n>0); 该条件只会在当arr...
C++模板变参实现Loki中的Length和TypeAt一,原Loki中的Length和TypeAt模拟实现如下1,模板文件/**********************************
*
* Author : szyu
*
* Date : 2017.1.7
*
**************************************/#ifndef __SZYU_LOKI__
#define __SZYU_LOKI__#include <iostream>
#include <vector>template <typename T, typename U>
class TypeList
{
publi...
通过result_of
multimap<typename std::result_of<Fn(Person)>::type, Person>
std::result_of<Fn(Arg)>::type可以获取function的返回值,没有魔法数,也没有declval繁琐的写法,很优雅。其实,查看源码就知道result_of内部就是通过declval实现的,作法和方式二一样,只是简化了写法。 std::function<int(int)> fr2,那么fr2就可以代表返回值和参数表相同的一类函数。std::bind用来将可调用对象与其参数一起进行绑定。绑定后可以使...
1、结构体内直接赋初始值struct Student{char* name = nullptr;unsigned int age = 15;int number = 21509111;
};如此一来,所有声明的新结构体对象就是默认上面的值。原文:https://www.cnblogs.com/fuqia/p/9538273.html
今天逛cplusplus.com发现C++还真多了不少方便使用的特性,先了解些最常用的初始化列表 vector<int> tmp({1,2,3,4});vector<pair<int, int> > tmp_pair({{1, 2},{3, 4}});或者直接初始化,跟一般的数组初始化非常像了 vector<int> tmp = {1, 2, 3, 4};vector<pair<int, int> > tmp_pair ={{1, 2},{3, 4}};for迭代for (int e : tmp) {cout<<e<<endl;}for(pair<int, int>& e : tmp_pair) {cout<<e.first<<","<<e.second<<endl;}...
编译环境:Windows 10 + elclipse +gcc-8.1.01、类型推导C++11 引入了 auto 和 decltype 这两个关键字实现了类型推导,由编译器在编译过程中完成类型推断过程。区别: 1)语法格式区别auto varname = value; // auto 根据=右边的初始值 value 推导出变量的类型,且varname必须初始化。
decltype(exp) varname = value; // decltype 根据 exp 表达式推导出变量的类型,跟=右边的 value 没有关系。原则上,exp ...
都说c++难学难精通,所以学习c++时要注意不要半瓶子晃荡,要对概念有着清晰的认识,不懂就问,慢慢积累,练习,自然就不难了。 问题:引用可以作为容器的参数吗? 权威的书都说不可以,但是理由却不是很清楚,查阅相关资料,大概可以说泛型的参数要求是object type,而引用不是。同理,容器也没有存储函数的吧,python中应该可以这么做。 类型萃取是什么?是java中的反射吗? 关于操作符重载:从random_device类中可以...
自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性。近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料。因为自己有C++98的基础,所以从C++98过渡到C++11并不算特别吃力,读了一些书籍后,算是对C++11有了个比较基础的理解,感觉程序员还是要经常保持新语言新特性的更新,现在 C++ 标准都出到C++17了!这篇文章就是对C++11一些常用新特性的一些总结,以C++98和 C++11在语法上的差异来突出C++1...
在C++中,左值(lvalue)是可以获取其地址的一个量。由于经常出现在赋值语句的左边,因此称之为左值。例如一个有名称的变量。 例如:int a=10;//a就是一个左值。 传统的C++引用,都是左值引用。例如:int &ra=a;将ra关联到a。这就是左值引用。 C++11,新增了右值引用的概念。用&&代表右值引用。 首先我们来看一下什么叫做右值。可以说所有不是左值的量都是右值。例如文本,临时对象或者临时值(都是不能获取地址的量)。 ...