本文档依据中国MOOC程序设计与算法(三)C++面向对象程序设计撰写
第一章从C到C++
类和对象的基本概念与用法(1)
对象的内存分配:成员函数不被包括在对象的内存吗?
第二章 类和对象基础
1.类和对象的基本概念(2)
question1
//假设A是一个类的名字,下面的程序片段会调用类A的析构函数几次? 答案:3次
int main() {
A * p = new A[2];
A * p2 = new A;
A a;
delete [] p;
}
不能访问私有成员变量?
2. 构造函数
对象所占用的存储空间是不是也是构造函数分配的?
answer:对象函数是在对象已经占用存储空间以后,在对象存储空间中做初始化的操作
对象一定有构造函数,如果定义类的时候没有写构造函数,则编译器生成个默认的无参数的构造函数
- 默认构造函数无参数,不做任何操作
构造函数在数组中的使用
class Test {
public:
Test( int n){}//(1)
Test( int n, int m) {}//(2)
Test(){}//(3)
};
Test array1[3]= { 1, Test(1,2)};//三个元素分别用(1),(2),(3)初始化
Test array2[3]= { Test(2,3), Test(1,2),1};(/三个元素分别用(2),(2), (1)初始化
Test * pArray[3]= { new Test(4), new Test(1,2)}//两个元素分别用(1),(2)初始化
对于代码中的 Test array1[3] = {1, Test(1,2)}
,它创建了一个名为 array1
的 Test
类型的数组,并初始化了其中的元素。
Test(1,2)
是以参数值 1
和 2
调用 Test
类的构造函数 (2)
来创建一个临时对象。这个临时对象将被用来初始化 array1
中的第二个元素。
因此,Test(1,2)
将调用 (2)
构造函数,而不是其他的构造函数 (1)
或 (3)
。
3.复制(拷贝)构造函数
一. 什么是拷贝构造函数
首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:
1. int a = 100;
1. int b = a;
而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。
下面看一个类对象拷贝的简单例子。
#include
using namespace std;
class CExample {
private:
int a;
public:
//构造函数
CExample(int b)
{ a = b;}
//一般函数
void Show ()
{
cout