// 6按别名传递book对像 //由于在创建一个book类对像时会创建3个String类对像,因此,假如我们按值传递一个book类对像给某个函数,那么对系统的消耗是相当可观的,接下来的例子将演示按值与按别名传递book类对像的不同 #include "String.h" class Book { public: Book(); ~Book(){ cout<<"Book类的析构函数执行...."<<endl;} Book(char*, char*, char*, float); //不能修改返回值,在函数内也不能修改,也不想调用复制构造函数,按地址传递 const String& GetTitle()const{ return title; } const String& GetAuthor()const{ return author; } String& GetAuthor(){ return author; } const String& GetNumber()const{ return number; } float GetPrice()const{ return price; } void SetTitle(const String& s){ title = s; } void SetAuthor(const String& s){ author = s; } void SetNumber(const String& s){ number = s; } void SetPrice(float p){ price = p; } void SetTotal(const String&t, const String&a,const String&n, float p) { title = t; author = a; number = n; price = p; } private: String title; //书名 String author; //作者 String number; //编号 float price; //价格 }; //创建一本空图书 Book::Book():title(""),author(""),number(""),price(0){ cout<<"Book类的不带参数构造函数执行...."<<endl; }; //创建一本有所有内容的图书 Book::Book(char* t, char* a, char* n, float p) { cout<<"Book类的带参数构造函数执行...."<<endl; title = t; author=a; number = n; price=p; } void print1(Book one); void print2(const Book &two); int main() { Book love("love","Jack","001",35.5); cout<<"调用print1函数"<<endl; print1(love); cout<<"调用print2函数"<<endl; print2(love); //这个例子中看出,按值传递一个book类对像,系统开销是相当大的,而按引用传递一个book类对像则几乎不产生系统开销 return 0; } void print1(Book one) { cout<<"书名:"<<one.GetTitle()<<" 作者:"<<one.GetAuthor()<<" 编号:"<<one.GetNumber()<<" 价格"<<one.GetPrice()<<endl; }; void print2(const Book &two) { cout<<"书名:"<<two.GetTitle()<<" 作者:"<<two.GetAuthor()<<" 编号:"<<two.GetNumber()<<" 价格"<<two.GetPrice()<<endl; }