C++

C++ 复习笔记 (之一)

2018-09-10  本文已影响18人  芒鞋儿

因为是自己复习时候的笔记,跳跃性比较大。

(1)const 放在成员函数前和放在成员函数后

放在前面表示返回类型:

void const getPt(int, int):

https://blog.csdn.net/lz20120808/article/details/46662569

放在成员函数后:表示不改变成员函数类型


void SetPt (int, int) const;

void OffsetPt (int, int) const;

(2)抽象類就是virtual,沒有abstract,不能和java搞在一起

(3)auto
一般auto 是自动转换类型,动态语言的实现,不是在编译时候进行转换,而是运行时候生成。C++ 是静态语言,而相比之下Python这类动态语言,也就是在运行时能够自动进行类型生成和转换比较受到欢迎,在C++11之后(14,17,18)就开始吸收别的语言的有点。

auto f = 3.14;  //double
auto s("hello");  //const char*
auto z = new auto(9);  //int *
auto x1 = 5, x2 = 5.0, x3 = 'r'; 

在使用vector 容器中的iterator以及const_iterator 的时候,auto 比较好用:

vector<string> stringVector(10,"hello");
for (auto iter = cbegin(stringVector); iter != cend(stringVector): ++iter) {
      cout << *iter << endl; 
}

(4)移动语义:
所有的STL容器都包含了移动构造函数和移动赋值运算符,从而实现移动语义。这样做的一大好处是可以通过传值的方式从函数返回STL容器,而不会降低性能。

vector<int> createVectorOfSize(size_t size)
{
     vector<int> vec(size);
     int contents = 0;
      for (auto& i : vec ) {
            i = contents++;
      }
}

vector<int> myVector;
myVector = createVectorOfSize(123);

如果没有移动语义,会从函数中返回vec 的 拷贝副本,赋予 myVector. 使用移动语义可以回避拷贝。例如:

class Element
{
       public:
            Element(int i, const string& str) : mI(i), mStr(str) {}
        private:   
             int mI;
             string mStr;
};

vector<Element> vec;

移动语义实现:

vec.push_back((12, "Twelve"));

(5)构造函数的delete

RoundRobin(const RoundRobin& src ) = delete 

可以抑制一部分构造函数的默认生成,替代private 方式

https://blog.csdn.net/u012333003/article/details/25299939

(6) Typename:

Typename std::vector<T>::iterator mCurElem;

Typename (1)用于指定模板参数,即泛型编程(模板编程)的功能,(2)当模板参数 用于访问迭代器类型,则必须指定typename

上一篇 下一篇

猜你喜欢

热点阅读