⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p601继承和编译器默认的函数.txt

📁 里面的代码是自己写的,参考书是thingking in c++,代码有详细的说明,对学习c++语法非常有帮助!
💻 TXT
字号:
/*本程序对应于thinking in c++ P600页的程序,在于说明
*/
#include <iostream>
using namespace std;

class GameBoard {
public :
	GameBoard() { cout << "GameBoard() \n"; }  //default constructor
	GameBoard( const GameBoard &)             
	{
		cout << "GameBoard( const GameBoard &) \n";
	}
	GameBoard & operator = (const GameBoard &) { cout << "GameBoard & operator = (const GameBoard &) \n";return * this;}

	~GameBoard() { cout << "~GameBoard()\n"; }
};


class Game {
private:
	GameBoard gb;     //composition
public:
	 
	//default GameBoard constructor  called,如果将GameBoard()去掉,则出错:: error C2512: “GameBoard” : 没有合适的默认构造函数可用
	Game(){ cout << "Game() \n"; }  

	//你必须显示通过gb(g.gb)调用GameBoard的拷贝构造函数,不然(即如果去掉: gb( g.gb ) )则默认构造函数被调用,在main()中用Game g1;Game g2(g1)实验。
	Game( const Game &g ): gb( g.gb ) { cout << "Game( const Game &g)\n"; }

	
	//default GameBoard constructor called,如果没有默认的构造函数,则出错同上。
	Game( int ) { cout << "Game( int )\n";} 

	//在main()中调用Game g1;Game g2;cout << " 开始拷贝 "<<endl;g2=g1;
	//如果去掉gb = g.gb 则对与this->gb来说没有完成赋值工作,还是原值保留不变。
	Game & operator = ( const Game & g ){ gb = g.gb; cout << "Game & operator = ( const Game & g )"; return *this;}
	
	class Other {};               //nested class嵌套类,定义这个类的目的是为了说明下面的自定义类型
	operator Other() const {      //自定义类型转换,定义这个转换的目的是为了说明:自定义转换可以被继承:在
		                          //main()中:Chess d1;f(d1);
		cout << "Game::operator Other()\n";
		return Other();
	}
	~Game() { cout << "~Game() \n";}
};


//继承,但是Chess没有自定义的函数,这样做是为了检查编译器会如何反应。在main()中: Chess d1;Chess d2(d1);
// Chess d3;d3 = d2; 会发现一个有趣的现象:在编译器默认拷贝构造函数和默认拷贝赋值函数中,如果该类有子对象(如Game中由类的组合得来的
//的子对象gb,或是由于继承而得来的基类子对象),则拷贝该成员类对象调用的是相同的过程(即调用子对象对应的类的拷贝构造函数或是拷贝赋值函数)。
//类继承
class Chess : public Game {};    

void f(Game::Other){}   //目的是为了说明自定义转换能够被继承。


class Checkers : public Game {
public:
	Checkers() { cout << "Checkers() \n"; }
	Checkers( const Checkers &c ) : Game(c) {
		cout << "Checkers ( const Checkers &c)\n ";
	}
	Checkers & operator = ( const Checkers & c) {
		Game::operator =( c );
         cout << "Checkers & operator = ( const Checkers & c)\n";
		 return *this;
	}
};

int main()
{
  Chess d1;
  f(d1);
}















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -