1. 类的初始化 - 构造器
- 可以将声明放在头文件中,将实现放在cpp文件中
- 类的初始化格式必须有对应的构造器
- 每个对象的构造器都会被执行,且只会被执行一次。
- 类的声明也可以使用默认参数
- 声明类时尽量避免Person p();这样的形式,因为这样声明对象容易与构造函数混淆。可以通过默认值或者其他办法避免这种格式。
- 在内存中函数和变量是分开储存的,但是如何同一调用、不会混乱?其实 对象.方法(参数)在编译器中是方法(&对象,参数)
- 每个成员函数有个隐含的形参this,this里面存放的是该对象的地址。就是调用该成员函数的指针。因此可以写成(*this).name = name;用简便写法this->name = name;
#include <iostream>
#include <string>
using namespace std;
class F{
int n;
int d;
int f;
public:
F(int n = 0, int d = 1);
F(int n = 0, int d = 1, int f = 2);
void print(bool newLine = true);
void input();
};
//几种初始化方法
F::F(int n, int d){
F::n = n;
this->d = d;
(*this).f = 0;
}
//老师的例子我这里不对
//F::(int n, int d, int f):n(n),d(d),f(f){
// cout << "n = " << n
// << "; d = " << d
// << "; f = "<< f
// << endl;
//}
int main(){
getchar();
return 0;
}
2. 类的拷贝构造函数
这个函数并不需要可以去完成,如果没有写系统会自动添加
#include <iostream>
using namespace std;
class CExample {
private:
int a;
int aa;
public:
CExample(int b)
{ a=b;}
//这个就是拷贝函数
//是个初始化函数的写法,只有一个传入参数就是本类类型
//aa的初始化方法是一种简便写法
CExample(const CExample& C) :aa(aa) {
a=C.a;
}
void Show () {
cout<<a<<endl;
}
};
int main()
{
CExample A(100);
CExample B=A;
B.Show ();
return 0;
}