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

📄 classdefs.h

📁 全套软件项目开发文档模板,全套软件项目开发文档模板
💻 H
字号:
#ifndef __CLASSDEFS_H__
#define __CLASSDEFS_H__

#include <string>


// nontrivial is a class which cannot be copied as a POD (plain-old-data) type.
// It has a copy constructor, a virtual destructor, an assignment operator, and
// sample const and non-const operations. It will be included as a member in the
// two classes, UsesAttorney and DoesntUseAttorney, that we will be examining.

class nontrivial
{
public:
   nontrivial();
   nontrivial(const std::string& s);
   nontrivial(const nontrivial& src);

   virtual ~nontrivial();

   nontrivial& operator=(const nontrivial& src);

   void const_op() const;
   void non_const_op(const std::string& s);

private:
   std::string s_;
};

// The classes UsesAttorney and DoesntUseAttorney demonstrate passing
// around instances of a nontrivial object in numerous ways: as a
// const reference, as a non-const reference, and as a value. These
// instances are passed into both const and non-const members of both
// classes. In addition, each class has a pair of members (one const and
// the other non-const) that each return a copy of a nontrivial object.

// The major difference between UsesAttorney and DoesntUseAttorney is that
// DoesntUseAttorney declares its test function (NonAttorney_test) directly
// as a friend function, whereas UsesAttorney grants access to its test
// function (Attorney_test) via its attorney class, Attorney.

class UsesAttorney
{
public:
   UsesAttorney();
   ~UsesAttorney();

   void ua_do_something();

private:
   int ua_h(const nontrivial& nt);
   int ua_i(nontrivial& nt);
   int ua_j(nontrivial nt);

   int ua_k(const nontrivial& nt) const;
   int ua_l(nontrivial& nt) const;
   int ua_m(nontrivial nt) const;

   nontrivial ua_n();
   nontrivial ua_o() const;

   nontrivial nt_;

   friend class Attorney;
};

class Attorney
{
// private:
   static int ua_h(UsesAttorney& cl, const nontrivial& nt) {	return cl.ua_h(nt); }
   static int ua_i(UsesAttorney& cl, nontrivial& nt) {	return cl.ua_i(nt); }
   static int ua_j(UsesAttorney& cl, nontrivial& nt) {	return cl.ua_j(nt); }

   static int ua_k(const UsesAttorney& cl, const nontrivial& nt) {	return cl.ua_k(nt); }
   static int ua_l(const UsesAttorney& cl, nontrivial& nt) {	return cl.ua_l(nt); }
   static int ua_m(const UsesAttorney& cl, nontrivial& nt) {	return cl.ua_m(nt); }

   static nontrivial ua_n(UsesAttorney& cl) {	return cl.ua_n(); }
   static nontrivial ua_o(const UsesAttorney& cl) {	return cl.ua_o(); }

   friend void Attorney_test();
};

void Attorney_test();


class DoesntUseAttorney
{
public:
   DoesntUseAttorney();
   ~DoesntUseAttorney();

   void dua_do_something();

private:
   int dua_h(const nontrivial& nt);
   int dua_i(nontrivial& nt);
   int dua_j(nontrivial nt);

   int dua_k(const nontrivial& nt) const;
   int dua_l(nontrivial& nt) const;
   int dua_m(nontrivial nt) const;

   nontrivial dua_n();
   nontrivial dua_o() const;

   nontrivial nt_;

   friend void NonAttorney_test();
};


void NonAttorney_test();

#endif	//	__CLASSDEFS_H__

⌨️ 快捷键说明

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