class ClassName {
accessType:
MemberVariableType memberVariable;
};
函数成员
定义和原型写在类定义内部的函数,可以操作类的任意对象,可以访问对象中的任意成员,定义方式如下
class ClassName {
accessType:
// 函数成员
ReturnType functionName() {
// Body of the function
}
} ClassInstance;
/**
其中 ClassInstance 是类的实例,为可选项
*/
成员函数定义的方式
在类的内部定义
class Animal {
public:
void run() {
cout << "Animal is running." << endl;
}
};
使用范围解析运算符 :: 在类的外部定义
class Animal {
// 数据成员
public:
int age;
// 函数成员
public:
void run();
};
void Animal::run() {
cout << "Animal is running" << endl;
}
访问修饰符
数据隐藏是OOP中重要的概念,C++使用访问修饰符实现数据隐藏的目的
访问修饰符的种类
public
在程序中类的外部可以访问
protected
在该类中与私有成员的访问权限一样,但是在派生类中可以访问
private
在程序中类的外部不可访问
只有类和友元函数可以访问私有成员
this指针
每一个类对象都有一个this指针指向自己的内存地址
注意
this指针是所有成员函数的隐含参数,用来指向调用对象
非成员函数没有this指针,如:友元函数,静态成员函数
示例
成员函数
// 向类Animal中,添加成员函数 int compare(Animal animal) 比较两个动物,哪个更年长
int compare(Animal animal) {
return this->age > animal.age;
}
友元函数
// 向类Animal中添加友元函数 int compare(Animal animal)
friend int compare(Animal animal);
// 实现友元函数,在友元函数中使用this指针,会产生编译错误
int compare(Animal animal) {
// error: Invalid use of 'this' outside of a non-static member function
return this->age > animal.age;
}
// 向类Animal添加静态数据成员animalCount,用于计算创建的动物的总数
private:
static int animalCount;
// 若在类定义中初始化静态数据成员,将会报如下的编译错误
// Error: Non-const static data member must be initialized out of line
// static int animalCount = 0;
// 在类定义外初始化Animal类中的静态数据成员animalCount
int Animal::animalCount = 0;
请发表评论