设计与声明
1.设计class犹如设计type
设计class前需要注意的问题:
- 新type的对象应该如何创建和销毁--构造函数和析构函数
- 对象的初始化和对象的赋值--构造函数和赋值操作符
- 新type对象的 pass by value
- 新type对象的“合法值”
- 继承图系
- 类型转换
- pubilc、protected、private成员函数
- 是否需要一个新type
2.宁以 pass-by-reference-to-const 替换 pass-vby-value
#include <iostream>
using namespace std;
class Person
{
public:
Person() .
{
cout<<"Person()"<<endl;
}
Person(const Person& p)
{
cout<<"Person(const Person& p)"<<endl;
}
virtual ~Person()
{
cout<<"~Person()"<<endl;
}
private:
string name;
string address;
};
class Student:public Person
{
public:
Student()
{
cout<<"Student()"<<endl;
}
Student(const Student& p)
{
cout<<"Student(const Student& p)"<<endl;
}
virtual ~Student()
{
cout<<"~Student()"<<endl;
}
private:
string schoolName;
string schoolAddress;
};
bool validateStudent(Student s)
{
return true;
}
int main()
{
Student stu;
bool s = validateStudent(stu);
return 0;
}
上述主函数只有一个函数调用,来看一下运行结果:
发生了两次Person无参构造函数,一次Student无参构造函数,一次Student复制构造函数,四次析构函数(其实还有两次String构造函数和两次String析构函数)。如此看来,这样的代码效率并不是很高。
修改validateStudent函数的参数调用:
bool validateStudent(
const Student& s)
{
return true;
}
代码运行效率明显提高了。