void main()
{fn(1,2);
fn(1,2,3);
}
结果:2
6
C++编译系统允许为两个或两个以上的函数取相同的函数名,但是形参的个数或者形参的类型不应相同(不涉及函数的返回值类型),编译系统会根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是所谓的函数重载。
8.类的定义
class Tdate
{public:
void Set(int m,int d,int y);
void Print();
private:
int month;
int day;
int year;
};
外联函数定义
内联函数的定义
一般情况下,一个模块由规范说明和实现两部分组成。模块中的说明部分作为一个单独的文件存放起来,这个文件被称为头文件,其扩展名为“.h”;而实现部分可能由多个扩展名为“.cpp”的文件组成。一般一个较大的文件可以分为三个文件来存放:
(1) 将类的说明作为一个头文件来存放。内联函数原型和定义一般归入头文件;
(2) 类的实现部分单独组成一个文件,用来存放类的成员函数的定义; (3) 在main()中实现类的应用。
9.对象
定义
class Tdate
{ 。。。。。。。。
} dot1,dot2,*P=& dot1;
或者使用时
Tdate dot1,dot2, *P=& dot1;
成员访问:
对象名.公有成员
指向对象的指针成员或(*对象指针名).公有成员
对象的引用.成员
10.this指针
void Tdate::set(int m,int d,int y)
{month=m; day=d; year=y;}
等同与如下写法:
void Tdate::set(int m,int d,int y)
{this->month=m; this->day=d; this->year=y;}
11.构造函数
无参构造函数和有参构造函数
#include
class test
{private:
int num;
float f1;
public:
test();
test(int n, float f);
} ;
test::test()
{num=0;
f=1.2;
cout<<"Default"<}
test::test(int n, float f)
{ num=0;
f=1.2;
cout<<"n="< }
void main()
{ test x;
test y(10, 21.5); }
结果:Default
n=10,f=21.5
拷贝构造函数
class cat
{private:
int age;
public:
cat();
cat(cat &);};
cat::cat(cat &other)
{age=other.age;
}
拷贝构造函数
拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象时系统自动调用它;其形参是本类对象的引用,它的特殊功能是将参数代表的对象逐域拷贝到新创建的对象中。
用户可以根据自己实际问题的需要定义特定的拷贝构造函数,以实现同类对象之间数据成员的传递。如果用户没有声明类的拷贝构造函数,系统就会自动生成一个缺省拷贝构造函数,这个缺省拷贝构造函数的功能是把初始对象的每个数据成员的值都复制到新建立的对象中。
自动调用的4种情况
1、 用类的一个对象去初始化另一个对象
2、 用类的一个对象去初始化另一个对象时的另外一种形式
3、 对象作为函数参数传递时,调用拷贝构造函数。
4、 如果函数的返回值是类的对象,函数调用返回时,调用拷贝构造函数。
拷贝构造函数分为两种,深拷贝和浅拷贝构造函数。由C++提供的默认拷贝构造函数是浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。数组是可以用浅拷贝的.
如果对象的数据成员包括指向堆空间的指针,就不能使用浅拷贝方式。深拷贝需要同时复制对象的空间和资源。
12.基本数据类型转换为类类型
class A
{public:
A();
A(int);
};
f(A a) // f函数的定义;f函数的形参为A类的对象
f(1); /*f函数的调用;进行f函数调用时先构造一个A类对象,调用A::A(int)
类类型向基本型转换
#include
class RMB