explicit

来源:互联网 发布:西部证券交易软件 编辑:程序博客网 时间:2024/06/07 03:38
#include<iostream>using namespace std;class A{    public:        A(){ cout<<"A()"<<endl; }        //explicit 禁止以赋值形式的隐式调用构造函数        explicit A(int val)            :val(val)        {            cout<<"A(int)"<<endl;        }        //explicit 禁止以赋值形式的隐式调用拷贝构造函数        explicit A(const A &a)        {            cout<<"A(const A&)"<<endl;        }    private:        int val;};void main(){    //A a=3; //error    A a(3);    //A a2=a; //error    A a2(a);}
//程序员习惯于遵循既有的限制来增加既有的东西。//黑客习惯于利用既有的东西来打破既有的限制。#include <iostream>using namespace std;class A{public:    /*explicit*/ A(int n = 0)        : value(n)    {        cout << "A()" << endl;    }    /*explicit*/ A(const A &a)    {        cout << "A(const A &a)" << endl;    }    ~A(){ cout << "~A()" << endl; }    int GetValue()    {        cout << value << endl;        return value;    }    void SetValue(int n)    {        value = n;    }private:    int value;};//普通C++程序员void f(){    A a;    a.SetValue(5);    a.GetValue();}//C程序员void f2(){    A a;    *((int *)&a) = 10;    a.GetValue();}//黑客void f3(){    A a = 15;    a.GetValue();}void f4(){    A a;    cout << "-----" << endl;    a = 20;    cout << "-----" << endl;    a.GetValue();}void main(){    f();    f2();    f3();    f4();}