桂林市住房和城乡建设局网站,齐齐哈尔网架公司,广告设计平面设计软件,每个城市建设规划在哪个网站C 类 对象
一、C 类 对象
C 在 C 语言的基础上增加了面向对象编程#xff0c;C 支持面向对象程序设计。类是 C 的核心特性#xff0c;通常被称为用户定义的类型。
类用于指定对象的形式#xff0c;它包含了数据表示法和用于处理数据的方法。类中的数据和方法…C 类 对象
一、C 类 对象
C 在 C 语言的基础上增加了面向对象编程C 支持面向对象程序设计。类是 C 的核心特性通常被称为用户定义的类型。
类用于指定对象的形式它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员
二、C 类定义
定义一个类本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据但它定义了类的名称意味着什么也就是说它定义了类的对象包括了什么以及可以在这个对象上执行哪些操作 类定义是以关键字 class 开头后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。例如我们使用关键字 class 定义 Box 数据类型如下所示
class Box
{public:double length; // 盒子的长度double breadth; // 盒子的宽度double height; // 盒子的高度
};关键字 public 确定了类成员的访问属性。在类对象作用域内公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected
三、定义 C 对象
类提供了对象的蓝图所以基本上对象是根据类来创建的。声明类的对象就像声明基本类型的变量一样。下面的语句声明了类 Box 的两个对象
Box Box1; // 声明 Box1类型为 Box
Box Box2; // 声明 Box2类型为 Box对象 Box1 和 Box2 都有它们各自的数据成员
四、访问数据成员
类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问
#include iostreamusing namespace std;class Box
{public:double length; // 长度double breadth; // 宽度double height; // 高度// 成员函数声明double get(void);void set( double len, double bre, double hei );
};
// 成员函数定义
double Box::get(void)
{return length * breadth * height;
}void Box::set( double len, double bre, double hei)
{length len;breadth bre;height hei;
}
int main( )
{Box Box1; // 声明 Box1类型为 BoxBox Box2; // 声明 Box2类型为 BoxBox Box3; // 声明 Box3类型为 Boxdouble volume 0.0; // 用于存储体积// box 1 详述Box1.height 5.0; Box1.length 6.0; Box1.breadth 7.0;// box 2 详述Box2.height 10.0;Box2.length 12.0;Box2.breadth 13.0;// box 1 的体积volume Box1.height * Box1.length * Box1.breadth;cout Box1 的体积 volume endl;// box 2 的体积volume Box2.height * Box2.length * Box2.breadth;cout Box2 的体积 volume endl;// box 3 详述Box3.set(16.0, 8.0, 12.0); volume Box3.get(); cout Box3 的体积 volume endl;return 0;
}Box1 的体积210 Box2 的体积1560 Box3 的体积1536 需要注意的是私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问。我们将在后续的教程中学习如何访问私有成员和受保护的成员
五、类 对象详解
5.1 类成员函数
类的成员函数是指那些把定义和原型写在类定义内部的函数就像类定义中的其他变量一样。类成员函数是类的一个成员它可以操作类的任意对象可以访问对象中的所有成员。
让我们看看之前定义的类 Box现在我们要使用成员函数来访问类的成员而不是直接访问这些类的成员
class Box
{public:double length; // 长度double breadth; // 宽度double height; // 高度double getVolume(void);// 返回体积
};成员函数可以定义在类定义内部或者单独使用范围解析运算符 :: 来定义。在类定义中定义的成员函数把函数声明为内联的即便没有使用 inline 标识符。所以您可以按照如下方式定义 getVolume() 函数
class Box
{public:double length; // 长度double breadth; // 宽度double height; // 高度double getVolume(void){return length * breadth * height;}
};也可以在类的外部使用范围解析运算符 :: 定义该函数如下所示
double Box::getVolume(void)
{return length * breadth * height;
}需要强调一点在 :: 运算符之前必须使用类名。调用成员函数是在对象上使用点运算符.这样它就能操作与该对象相关的数据如下所示
Box myBox; // 创建一个对象myBox.getVolume(); // 调用该对象的成员函数我们使用上面提到的概念来设置和获取类中不同的成员的值
#include iostreamusing namespace std;class Box
{public:double length; // 长度double breadth; // 宽度double height; // 高度// 成员函数声明double getVolume(void);void setLength( double len );void setBreadth( double bre );void setHeight( double hei );
};// 成员函数定义
double Box::getVolume(void)
{return length * breadth * height;
}void Box::setLength( double len )
{length len;
}void Box::setBreadth( double bre )
{breadth bre;
}void Box::setHeight( double hei )
{height hei;
}// 程序的主函数
int main( )
{Box Box1; // 声明 Box1类型为 BoxBox Box2; // 声明 Box2类型为 Boxdouble volume 0.0; // 用于存储体积// box 1 详述Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0);// box 2 详述Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0);// box 1 的体积volume Box1.getVolume();cout Box1 的体积 volume endl;// box 2 的体积volume Box2.getVolume();cout Box2 的体积 volume endl;return 0;
}Box1 的体积 210 Box2 的体积 1560 5.2 类访问修饰符
数据封装是面向对象编程的一个重要特点它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。
一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是 private
class Base {public:// 公有成员protected:// 受保护成员private:// 私有成员};公有public成员 公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值如下所示
#include iostreamusing namespace std;class Line
{public:double length;void setLength( double len );double getLength( void );
};// 成员函数定义
double Line::getLength(void)
{return length ;
}void Line::setLength( double len )
{length len;
}// 程序的主函数
int main( )
{Line line;// 设置长度line.setLength(6.0); cout Length of line : line.getLength() endl;// 不使用成员函数设置长度line.length 10.0; // OK: 因为 length 是公有的cout Length of line : line.length endl;return 0;
}Length of line : 6 Length of line : 10 私有private成员 私有成员变量或函数在类的外部是不可访问的甚至是不可查看的。只有类和友元函数可以访问私有成员。
默认情况下类的所有成员都是私有的。例如在下面的类中width 是一个私有成员这意味着如果您没有使用任何访问修饰符类的成员将被假定为私有成员
class Box
{double width;public:double length;void setWidth( double wid );double getWidth( void );
};实际操作中我们一般会在私有区域定义数据在公有区域定义相关的函数以便在类的外部也可以调用这些函数如下所示
#include iostreamusing namespace std;class Box
{public:double length;void setWidth( double wid );double getWidth( void );private:double width;
};// 成员函数定义
double Box::getWidth(void)
{return width ;
}void Box::setWidth( double wid )
{width wid;
}// 程序的主函数
int main( )
{Box box;// 不使用成员函数设置长度box.length 10.0; // OK: 因为 length 是公有的cout Length of box : box.length endl;// 不使用成员函数设置宽度// box.width 10.0; // Error: 因为 width 是私有的box.setWidth(10.0); // 使用成员函数设置宽度cout Width of box : box.getWidth() endl;return 0;
}Length of box : 10 Width of box : 10 protected受保护成员 protected受保护成员变量或函数与私有成员十分相似但有一点不同protected受保护成员在派生类即子类中是可访问的。
下面的实例中我们从父类 Box 派生了一个子类 smallBox。
下面的实例与前面的实例类似在这里 width 成员可被派生类 smallBox 的任何成员函数访问
#include iostream
using namespace std;class Box
{protected:double width;
};class SmallBox:Box // SmallBox 是派生类
{public:void setSmallWidth( double wid );double getSmallWidth( void );
};// 子类的成员函数
double SmallBox::getSmallWidth(void)
{return width ;
}void SmallBox::setSmallWidth( double wid )
{width wid;
}// 程序的主函数
int main( )
{SmallBox box;// 使用成员函数设置宽度box.setSmallWidth(5.0);cout Width of box : box.getSmallWidth() endl;return 0;
}Width of box : 5 继承中的特点 有public, protected, private三种继承方式它们相应地改变了基类成员的访问属性。
1.public 继承基类 public 成员protected 成员private 成员的访问属性在派生类中分别变成public, protected, private
2.protected 继承基类 public 成员protected 成员private 成员的访问属性在派生类中分别变成protected, protected, private
3.private 继承基类 public 成员protected 成员private 成员的访问属性在派生类中分别变成private, private, private
但无论哪种继承方式上面两点都没有改变
1.private 成员只能被本类成员类内和友元访问不能被派生类访问
2.protected 成员可以被派生类访问。
public 继承
#includeiostream
#includeassert.h
using namespace std;class A{
public:int a;A(){a1 1;a2 2;a3 3;a 4;}void fun(){cout a endl; //正确cout a1 endl; //正确cout a2 endl; //正确cout a3 endl; //正确}
public:int a1;
protected:int a2;
private:int a3;
};
class B : public A{
public:int a;B(int i){A();a i;}void fun(){cout a endl; //正确public成员cout a1 endl; //正确基类的public成员在派生类中仍是public成员。cout a2 endl; //正确基类的protected成员在派生类中仍是protected可以被派生类访问。cout a3 endl; //错误基类的private成员不能被派生类访问。}
};
int main(){B b(10);cout b.a endl;cout b.a1 endl; //正确cout b.a2 endl; //错误类外不能访问protected成员cout b.a3 endl; //错误类外不能访问private成员system(pause);return 0;
}protected 继承
#includeiostream
#includeassert.h
using namespace std;
class A{
public:int a;A(){a1 1;a2 2;a3 3;a 4;}void fun(){cout a endl; //正确cout a1 endl; //正确cout a2 endl; //正确cout a3 endl; //正确}
public:int a1;
protected:int a2;
private:int a3;
};
class B : protected A{
public:int a;B(int i){A();a i;}void fun(){cout a endl; //正确public成员。cout a1 endl; //正确基类的public成员在派生类中变成了protected可以被派生类访问。cout a2 endl; //正确基类的protected成员在派生类中还是protected可以被派生类访问。cout a3 endl; //错误基类的private成员不能被派生类访问。}
};
int main(){B b(10);cout b.a endl; //正确。public成员cout b.a1 endl; //错误protected成员不能在类外访问。cout b.a2 endl; //错误protected成员不能在类外访问。cout b.a3 endl; //错误private成员不能在类外访问。system(pause);return 0;
}private 继承
#includeiostream
#includeassert.h
using namespace std;
class A{
public:int a;A(){a1 1;a2 2;a3 3;a 4;}void fun(){cout a endl; //正确cout a1 endl; //正确cout a2 endl; //正确cout a3 endl; //正确}
public:int a1;
protected:int a2;
private:int a3;
};
class B : private A{
public:int a;B(int i){A();a i;}void fun(){cout a endl; //正确public成员。cout a1 endl; //正确基类public成员,在派生类中变成了private,可以被派生类访问。cout a2 endl; //正确基类的protected成员在派生类中变成了private,可以被派生类访问。cout a3 endl; //错误基类的private成员不能被派生类访问。}
};
int main(){B b(10);cout b.a endl; //正确。public成员cout b.a1 endl; //错误private成员不能在类外访问。cout b.a2 endl; //错误, private成员不能在类外访问。cout b.a3 endl; //错误private成员不能在类外访问。system(pause);return 0;
}5.3 构造函数 析构函数
类的构造函数 类的构造函数是类的一种特殊的成员函数它会在每次创建类的新对象时执行。
构造函数的名称与类的名称是完全相同的并且不会返回任何类型也不会返回 void。构造函数可用于为某些成员变量设置初始值。
下面的实例有助于更好地理解构造函数的概念
#include iostreamusing namespace std;class Line
{public:void setLength( double len );double getLength( void );Line(); // 这是构造函数private:double length;
};// 成员函数定义包括构造函数
Line::Line(void)
{cout Object is being created endl;
}void Line::setLength( double len )
{length len;
}double Line::getLength( void )
{return length;
}
// 程序的主函数
int main( )
{Line line;// 设置长度line.setLength(6.0); cout Length of line : line.getLength() endl;return 0;
}Object is being created Length of line : 6 带参数的构造函数 默认的构造函数没有任何参数但如果需要构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值如下面的例子所示
#include iostreamusing namespace std;class Line
{public:void setLength( double len );double getLength( void );Line(double len); // 这是构造函数private:double length;
};// 成员函数定义包括构造函数
Line::Line( double len)
{cout Object is being created, length len endl;length len;
}void Line::setLength( double len )
{length len;
}double Line::getLength( void )
{return length;
}
// 程序的主函数
int main( )
{Line line(10.0);// 获取默认设置的长度cout Length of line : line.getLength() endl;// 再次设置长度line.setLength(6.0); cout Length of line : line.getLength() endl;return 0;
}Object is being created, length 10 Length of line : 10 Length of line : 6 使用初始化列表来初始化字段 使用初始化列表来初始化字段 Line::Line( double len): length(len) { cout Object is being created, length len endl; } 上面的语法等同于如下语法 Line::Line( double len) { length len; cout Object is being created, length len endl; } 假设有一个类 C具有多个字段 X、Y、Z 等需要进行初始化同理地您可以使用上面的语法只需要在不同的字段使用逗号进行分隔如下所示 C::C( double a, double b, double c): X(a), Y(b), Z© { … } 类的析构函数 类的析构函数是类的一种特殊的成员函数它会在每次删除所创建的对象时执行。
析构函数的名称与类的名称是完全相同的只是在前面加了个波浪号~作为前缀它不会返回任何值也不能带有任何参数。析构函数有助于在跳出程序比如关闭文件、释放内存等前释放资源。
下面的实例有助于更好地理解析构函数的概念
#include iostreamusing namespace std;class Line
{public:void setLength( double len );double getLength( void );Line(); // 这是构造函数声明~Line(); // 这是析构函数声明private:double length;
};// 成员函数定义包括构造函数
Line::Line(void)
{cout Object is being created endl;
}
Line::~Line(void)
{cout Object is being deleted endl;
}void Line::setLength( double len )
{length len;
}double Line::getLength( void )
{return length;
}
// 程序的主函数
int main( )
{Line line;// 设置长度line.setLength(6.0); cout Length of line : line.getLength() endl;return 0;
}Object is being created Length of line : 6 Object is being deleted 5.4 C 拷贝构造函数
拷贝构造函数是一种特殊的构造函数它在创建对象时是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于
通过使用另一个同类型的对象来初始化新创建的对象。
复制对象把它作为参数传递给函数。
复制对象并从函数返回这个对象。
如果在类中没有定义拷贝构造函数编译器会自行定义一个。如果类带有指针变量并有动态内存分配则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下 classname (const classname obj) { // 构造函数的主体 } 在这里obj 是一个对象引用该对象是用于初始化另一个对象的
#include iostreamusing namespace std;class Line
{public:int getLength( void );Line( int len ); // 简单的构造函数Line( const Line obj); // 拷贝构造函数~Line(); // 析构函数private:int *ptr;
};// 成员函数定义包括构造函数
Line::Line(int len)
{cout 调用构造函数 endl;// 为指针分配内存ptr new int;*ptr len;
}Line::Line(const Line obj)
{cout 调用拷贝构造函数并为指针 ptr 分配内存 endl;ptr new int;*ptr *obj.ptr; // 拷贝值
}Line::~Line(void)
{cout 释放内存 endl;delete ptr;
}
int Line::getLength( void )
{return *ptr;
}void display(Line obj)
{cout line 大小 : obj.getLength() endl;
}// 程序的主函数
int main( )
{Line line(10);display(line);return 0;
}调用构造函数 调用拷贝构造函数并为指针 ptr 分配内存 line 大小 : 10 释放内存 释放内存 下面的实例对上面的实例稍作修改通过使用已有的同类型的对象来初始化新创建的对象
#include iostreamusing namespace std;class Line
{public:int getLength( void );Line( int len ); // 简单的构造函数Line( const Line obj); // 拷贝构造函数~Line(); // 析构函数private:int *ptr;
};// 成员函数定义包括构造函数
Line::Line(int len)
{cout 调用构造函数 endl;// 为指针分配内存ptr new int;*ptr len;
}Line::Line(const Line obj)
{cout 调用拷贝构造函数并为指针 ptr 分配内存 endl;ptr new int;*ptr *obj.ptr; // 拷贝值
}Line::~Line(void)
{cout 释放内存 endl;delete ptr;
}
int Line::getLength( void )
{return *ptr;
}void display(Line obj)
{cout line 大小 : obj.getLength() endl;
}// 程序的主函数
int main( )
{Line line1(10);Line line2 line1; // 这里也调用了拷贝构造函数display(line1);display(line2);return 0;
}调用构造函数 调用拷贝构造函数并为指针 ptr 分配内存 调用拷贝构造函数并为指针 ptr 分配内存 line 大小 : 10 释放内存 调用拷贝构造函数并为指针 ptr 分配内存 line 大小 : 10 释放内存 释放内存 释放内存 5.5 C 友元函数
类的友元函数是定义在类外部但有权访问类的所有私有private成员和保护protected成员。尽管友元函数的原型有在类的定义中出现过但是友元函数并不是成员函数。
友元可以是一个函数该函数被称为友元函数友元也可以是一个类该类被称为友元类在这种情况下整个类及其所有成员都是友元。
如果要声明函数为一个类的友元需要在类定义中该函数原型前使用关键字 friend如下所示
class Box
{double width;
public:double length;friend void printWidth( Box box );void setWidth( double wid );
};声明类 ClassTwo 的所有成员函数作为类 ClassOne 的友元需要在类 ClassOne 的定义中放置如下声明 friend class ClassTwo; #include iostreamusing namespace std;class Box
{double width;
public:friend void printWidth( Box box );void setWidth( double wid );
};// 成员函数定义
void Box::setWidth( double wid )
{width wid;
}// 请注意printWidth() 不是任何类的成员函数
void printWidth( Box box )
{/* 因为 printWidth() 是 Box 的友元它可以直接访问该类的任何成员 */cout Width of box : box.width endl;
}// 程序的主函数
int main( )
{Box box;// 使用成员函数设置宽度box.setWidth(10.0);// 使用友元函数输出宽度printWidth( box );return 0;
}Width of box : 10 5.6 C 内联函数
C 内联函数是通常与类一起使用。如果一个函数是内联的那么在编译时编译器会把该函数的代码副本放置在每个调用该函数的地方。
对内联函数进行任何修改都需要重新编译函数的所有客户端因为编译器需要重新更换一次所有的代码否则将会继续使用旧的函数。
如果想把一个函数定义为内联函数则需要在函数名前面放置关键字 inline在调用函数之前需要对函数进行定义。如果已定义的函数多于一行编译器会忽略 inline 限定符。
在类定义中的定义的函数都是内联函数即使没有使用 inline 说明符。
下面是一个实例使用内联函数来返回两个数中的最大值
#include iostreamusing namespace std;inline int Max(int x, int y)
{return (x y)? x : y;
}// 程序的主函数
int main( )
{cout Max (20,10): Max(20,10) endl;cout Max (0,200): Max(0,200) endl;cout Max (100,1010): Max(100,1010) endl;return 0;
}Max (20,10): 20 Max (0,200): 200 Max (100,1010): 1010 5.7 C 中的 this 指针
在 C 中每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此在成员函数内部它可以用来指向调用对象。
友元函数没有 this 指针因为友元不是类的成员。只有成员函数才有 this 指针。
下面的实例有助于更好地理解 this 指针的概念
#include iostreamusing namespace std;class Box
{public:// 构造函数定义Box(double l2.0, double b2.0, double h2.0){cout Constructor called. endl;length l;breadth b;height h;}double Volume(){return length * breadth * height;}int compare(Box box){return this-Volume() box.Volume();}private:double length; // Length of a boxdouble breadth; // Breadth of a boxdouble height; // Height of a box
};int main(void)
{Box Box1(3.3, 1.2, 1.5); // Declare box1Box Box2(8.5, 6.0, 2.0); // Declare box2if(Box1.compare(Box2)){cout Box2 is smaller than Box1 endl;}else{cout Box2 is equal to or larger than Box1 endl;}return 0;
}Constructor called. Constructor called. Box2 is equal to or larger than Box1 5.8 C 中指向类的指针
一个指向 C 类的指针与指向结构的指针类似访问指向类的指针的成员需要使用成员访问运算符 -就像访问指向结构的指针一样。与所有的指针一样必须在使用指针之前对指针进行初始化。
下面的实例有助于更好地理解指向类的指针的概念
#include iostreamusing namespace std;class Box
{public:// 构造函数定义Box(double l2.0, double b2.0, double h2.0){cout Constructor called. endl;length l;breadth b;height h;}double Volume(){return length * breadth * height;}private:double length; // Length of a boxdouble breadth; // Breadth of a boxdouble height; // Height of a box
};int main(void)
{Box Box1(3.3, 1.2, 1.5); // Declare box1Box Box2(8.5, 6.0, 2.0); // Declare box2Box *ptrBox; // Declare pointer to a class.// 保存第一个对象的地址ptrBox Box1;// 现在尝试使用成员访问运算符来访问成员cout Volume of Box1: ptrBox-Volume() endl;// 保存第二个对象的地址ptrBox Box2;// 现在尝试使用成员访问运算符来访问成员cout Volume of Box2: ptrBox-Volume() endl;return 0;
}Constructor called. Constructor called. Volume of Box1: 5.94 Volume of Box2: 102 5.9 C 类的静态成员
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时这意味着无论创建多少个类的对象静态成员都只有一个副本 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句在创建第一个对象时所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化如下面的实例所示。
下面的实例有助于更好地理解静态成员数据的概念
#include iostreamusing namespace std;class Box
{public:static int objectCount;// 构造函数定义Box(double l2.0, double b2.0, double h2.0){cout Constructor called. endl;length l;breadth b;height h;// 每次创建对象时增加 1objectCount;}double Volume(){return length * breadth * height;}private:double length; // 长度double breadth; // 宽度double height; // 高度
};// 初始化类 Box 的静态成员
int Box::objectCount 0;int main(void)
{Box Box1(3.3, 1.2, 1.5); // 声明 box1Box Box2(8.5, 6.0, 2.0); // 声明 box2// 输出对象的总数cout Total objects: Box::objectCount endl;return 0;
}Constructor called. Constructor called. Total objects: 2 静态成员函数 如果把函数成员声明为静态的就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用静态函数只要使用类名加范围解析运算符 :: 就可以访问。
静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。
静态成员函数有一个类范围他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。 静态成员函数与普通成员函数的区别 静态成员函数没有 this 指针只能访问静态成员包括静态成员变量和静态成员函数。 普通成员函数有 this 指针可以访问类中的任意成员而静态成员函数没有 this 指针 #include iostreamusing namespace std;class Box
{public:static int objectCount;// 构造函数定义Box(double l2.0, double b2.0, double h2.0){cout Constructor called. endl;length l;breadth b;height h;// 每次创建对象时增加 1objectCount;}double Volume(){return length * breadth * height;}static int getCount(){return objectCount;}private:double length; // 长度double breadth; // 宽度double height; // 高度
};// 初始化类 Box 的静态成员
int Box::objectCount 0;int main(void)
{// 在创建对象之前输出对象的总数cout Inital Stage Count: Box::getCount() endl;Box Box1(3.3, 1.2, 1.5); // 声明 box1Box Box2(8.5, 6.0, 2.0); // 声明 box2// 在创建对象之后输出对象的总数cout Final Stage Count: Box::getCount() endl;return 0;
}Inital Stage Count: 0 Constructor called. Constructor called. Final Stage Count: 2 菜鸟教程学习记录