#include<iostream>usingnamespace std;classA{public:A(){ cout<<"A()"<<endl;}//explicit 禁止以赋值形式的隐式调用构造函数explicitA(int val):val(val){
cout<<"A(int)"<<endl;}//explicit 禁止以赋值形式的隐式调用拷贝构造函数explicitA(const A &a){
cout<<"A(const A&)"<<endl;}private:int val;};voidmain(){//A a=3; //error
A a(3);//A a2=a; //error
A a2(a);}
//程序员习惯于遵循既有的限制来增加既有的东西。//黑客习惯于利用既有的东西来打破既有的限制。#include<iostream>usingnamespace std;classA{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;}intGetValue(){
cout << value << endl;return value;}voidSetValue(int n){
value = n;}private:int value;};//普通C++程序员voidf(){
A a;
a.SetValue(5);
a.GetValue();}//C程序员voidf2(){
A a;*((int*)&a)=10;
a.GetValue();}//黑客voidf3(){
A a =15;
a.GetValue();}voidf4(){
A a;
cout <<"-----"<< endl;
a =20;
cout <<"-----"<< endl;
a.GetValue();}voidmain(){f();f2();f3();f4();}