一.基础
1.标准C++定义了一些内建的类,如string
2.成员选择符: .或->
3.如果成员函数在的定义在类声明之中,则这种方式为inline
通过在进行成员函数声明的时候使用inline,可将原本定义在类声明之外的成员函数强制变成内联函数。
4.通常将一个类的声明放在头文件中,这样在任何要使用这个类的地方通过#include宏便可将这个类的声明包含进来。
5.效率和健壮性:
一般,类都是作为引用方式进行传递的.
6.C& g(){static C c3; c3.set(123); return c3;}
7.const
const类型参数可防止对参数的误写。
const类型函数:不能直接或间接改变该函数所属对象的任何成员数据。
const只能调用const函数
8.对成员函数进行重载以便处理两种类型的字符串。
二.构造函数与析构函数
它们在调用时不需要显式地提供函数名.
Persion ps("hanyin");
1.利用构造函数约束对象的创建
a.把默认构造函数设为私有的;b.声明有参数的构造函数
2.拷贝构造函数
copy constructor可以有多个参数,但是第一个以后的都必须有默认值。
如果设计者不提供,编译会自动生成一个:并且,它会将源对象的所有数据成员赋给目标对象的相应数据成员。
故:当一个类包含指向动态存储区指针成员时,要为其设计拷贝构造函数。
Person(Person &p){/***/}
或Person(const Person& p){}
3.禁止通过传值方式传递和返回类对象。
如果构造函数是私有的,则可做到这点。
4.转型构造函数
若:
void f(Person p);//declaration
如果以string 来调用f:
string s="Turandot";
f(s); //string ,not Person
只要:Person有这样的一个转型构造函数,Person(string s){},则编译器会自动调用:
--->f(Person(s));
!!--->隐式类型转换....
可在在构造函数前加止explicit来阻止这种隐式的转换
5.构造函数初始化程序:初始化const类数据的惟一方法!!
class Person{
public Person():c(10){/****/}
private:
const int c;
}
6.建议对每个带有数据成员的类设计一个默认构造函数,如果需要释放资源,也应有析构函数。
三.类数据成员和类成员函数
类数据成员:static int n;
在外部使用时:className::n=10;
在程序块之外定义的任何变量都将自动地初始化为0
类成员函数:static函数只能访问static函数和static成员数据
另外,static可是inline或非inline
四.在成员函数内定义static变量
如果如此,则该类所有对象在调用这个成员函数时将共享这个变量。
五.指向对象的指针
this: this为实例化的对象,它只是一个常量,不可作为左值
void File::copy(File& dest){if(this==&dest){return ;}}
六。引用实际上就是取址:因为它们的地址是相同的..
如 string s1="GOD"; string& s2=s1;
if(&s1==&s2){cout<<"s1==s2 is true!"<<endl;
七。常见错误
1.类的声明少了分号
2.给const成员赋值,即使在构造函数中也不可以.
3.C(C obj){}...错误...