C++11特性(2):快速初始化变量、final和override、模版函数

#include <iostream>
 
struct init
{
     int a = 1;
     //1、快速初始化成员变量
     //在成员快速初始化阶段时,不能使用()来初始化,
     //对于非静态成员变量只能使用=或者{}来进行快速初始化
     std::string s{ "sss" }; //std::string s("aaa");---->error
     double d{ 3.0 };  //double d(3.0);---->error
};
 
class Mem
{
public :
    Mem(int i) :m(i){}
private:
    int m{0};
};
 
class Group
{
public :
     Group() = default;
     Group(int a) : data(a){}
     Group(Mem m) : mem(m){}
     Group(int a, Mem m, std::string s) :data(a), mem(m), name(s){}
private:
     int data = 1;
     Mem mem{ 0 };
     std::string name{ "123" };
};
 
class Person
{
public:
     int hand = 0;
     static Person* all;
     static int b;
};
Person* Person::all = nullptr;
int Person::b; //默认为0
 
//2、final用于修饰类或者函数,用于修饰的类则不具有继承性;用于修饰的函数则无法重载
class Base
{
     virtual void fun() = 0;
     virtual void fun3() = 0;
};
 
class Derived1 : public Base
{
     void fun() final{}
     virtual void fun2() = 0;
     //3、override函数重载
     //3-1、派生类在虚函数声明时使用override,则该函数必须重载基类中的同名函数,包括参数类型,参    数列表,参数顺序等需要一致,否则编译出错
     //3-2、对非虚函数进行重载也会出错
     void fun4() override {} //---->error
};
 
class Derived2 final: public Derived1
{
     //2-1
     void fun(){} //error ,Derived2的基类Derived1的fun函数采用final修饰,对于派生类来说就无法重载
     void fun2() override{}
};
 
//2-2
//基类Derived2才有final修饰,即Derived2类不可继承,否则编译出错
class Derived3 : public Derived2{};
 
//4、模版函数的默认模版参数,
//4-1、规则:
//(1)对于类模版:在有多个默认模版参数声明为指定默认值时,遵照“从右往左”的规则指定
//(2)对于函数模版来说则不需要,可以根据函数参数类型推导模版类型
template<typename T = int>
class DefClass{};
template<typename T = int>
void DefFunc(){}
 
//error ,类模版默认参数未遵照从右往左的规则
template<typename T1 = int ,typename T2> class DefClass2{};
//ok
template<typename T1, typename T2 = int> class DefClass3{};
//ok
template<typename T1 = int, typename T2> void DefFunc2();
//ok
template<typename T1, typename T2 = int> void DefFunc3();

int main()
{
     Person p;
     std::cout << sizeof(p.hand) << std::endl;
     std::cout << sizeof(Person::all) << std::endl;
     std::cout << sizeof(((Person*)0)->hand) << std::endl;
     std::cout << sizeof(p.all) << std::endl;
     std::cout << p.b << std::endl;
     return 0;
}


====================打个广告,欢迎关注====================

QQ:412425870
csdn博客:
http://blog.csdn.net/caychen
码云:
https://gitee.com/caychen/
github:
https://github.com/caychen

点击群号或者扫描二维码即可加入QQ群:

328243383(1群)



点击群号或者扫描二维码即可加入QQ群:

180479701(2群)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值