- 关于const
- 关于类的构造函数和析构函数
- 关于类的this指针
- 操作符的重载,以及重载的限制
- c++中的友元
- c++的多态
只要类的方法不修改调用对象,就将其声明为const;将const的引用和指针作为形参可以提高代码的效率。
void show() const;
void stock::show() const;//
类的构造函数,类的成员函数可以访问类的私有成员,私有的数据成员对外面的程序是隐藏的。c++中类方法和友元是表达类接口的两种不同的机制。构造函数就是为了在创建对象的时候,方便给对象进行初始化。
//构造函数有两个参数的时候,对象的初始化的三种方式
Bozo (const char * fname,const char* lname);
Bozo bozetta = Bozo ("Bozetta","Biggens");
Bozo fufu("Fufu","O'Dweeb");
Bozo *pc = new Bozo("Popo","Le Peu");
//一个参数的时候
Bozo (int age);
Bozo dribble = bozo;
Bozo roon (66);
Bozo tubby = 32;
析构函数一般是没有参数的,对象会在程序的最后自动调用析构函数。如果在构造函数中有new,那么在析构函数中一定要delete,不然会造成严重的后果——内存泄漏。
有时候成员函数涉及到两个对象,在这种情况之下需要使用c++ 的this指针。
//类方法的声明
const stock & topval(const stock &s)const;//句尾的const是保证隐式对象的常性
//类方法的定义
const stock & stock::topval(const stock &s)const
{
if(s.total_val > total_val)
return s;
else
return *this;
/*this指针指向用来调用成员函数的对象(this被作为隐藏的参数传递给方法)。一般来说,所有类的方法都将this指针设置为调用过它的对象的地址。*this即调用成员函数的对象
}
运算符重载,为了使自定义的数据类型,可以和基本数据类型一样地进行运算,用操作符函数来重新定义。
operator op (argument-list)//操作符函数
重载的限制:
- 重载不一定是成员函数,但必须保证有一个操作数是用户定义类型
- 重载操作符不能违反操作符原来的句法原则和操作符的优先级
- 不能定义新的操作符
- 不能重载下面的操作符:sizeof | . | .* | :: | ?: | typeid | const_const | dynamic_const | reinterpret_const | static_const |
- 用成员函数重载的运算符: = , ( ) , [ ] , ->
不要返回指向局部变量或是临时变量的引用:
class Time
{}:
//返回Time类型的对象,将创建的对象拷贝;传time类型的引用,可以提高效率。
Time Time::Sum(const Time &t) const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes/60;
sum.minutes % = 60;
return sum;
/*如果函数的返回值是Time&,则将引用的是sum对象。由于sum对象是个临时变量,在函数结束时将被删除,此时引用将会指向一个不存在的对象*/
}
c++中的友元:友元函数,友元类,友元成员函数。非成员函数想要访问类的数据成员,可以通过友元函数的形式来访问,其权限与类中的成员函数是一致的。
一般来说,要重载"<<"操作符来显示c_name对象,可以使用一个友元函数来实现。
ostream & operator <<(ostream &os,const c_name &obj)
{
os<<...;//display object contents
return os;
}
C++的多态性:(1)编译时多态:包括函数名(操作符)的重载.(2)运行时多态:通过派生类和虚函数来实现。
ps:一个类中,若有一个纯虚函数,那么它就是个抽象类。抽象类不能实例化(因为抽象类中至少有一个函数没有实现),则该基类中的任何派生类都必须自定义实现。“vitual”函数是在运行时候才确定的而不是在编译的时候确定。
类模板实例化后的产物就是模板类,类模板的使用格式:类名(实际类型)。
C++中的参数传递,可以用应用的方式传递参数。当把一个体积较大的对象作为参数传递时,使用引用的方式将大大节省传递参数的时间,并可以节省存储参数对象的副本空间。
C++的输入输出格式是自由的。struct的默认访问级别是public,class的默认访问级别是private。