类对象不能直接访问类的私有成员,不能在类外访问类的私有成员。只有基类的成员函数能访问私有成员,不能被派生类的成员函数访问。
如果在类声明时没有给出成员访问限定符,则默认的成员访问属性是私有的。
常成员函数的定义:int Test::GetValue( ) const {return value;}。const 修饰的对象称为常对象。
类的指针成员的初始化是通过函数完成的,这个函数通常是构造函数。
在单继承和多继承方式中,面向对象的程序设计应尽量使用单继承。
在类外定义成员函数时,必须在函数名前面加上类名和作用域运算符进行限定。
一个函数功能不太复杂,但要求被频繁调用,则应把它定义为内联函数。
如果一个派生类只有一个直接基类,这称为单继承,如果一个派生类有两个或多个直接基类,称为多继承。
#include<iostream>
using namespace std;
class A
{
public:
A(int i=10)
{
x=i;
cout<<"a:"<<x<<endl;
}
int x;
};
class B : public A
{
public:
B(int i):A(i)
{
x=i;
cout<<"b:"<<x<<", "<<A::x<<endl;
}
private:
A a;
int x;
};
int main()
{
A a(5);
cout<<"发生了什么?"<<endl;
B b(5);
cout<<"又发生了什么?"<<endl;
return 0;
}
参考答案:
a:5
发生了什么?
a:5
a:10
b:5, 5
又发生了什么?
不可以声明抽象类的对象,但是可以声明抽象类的指针变量。
静态成员没有 this 指针。
使用友元函数的目的是提高程序的运行效率。
如果一个类继承了一个抽象类,并且没有实现抽象类中的所有纯虚函数,那么这个子类也会变成一个抽象类。子类可以重写父类的虚函数,这样的函数也被称为虚函数,可以省略 virtual。抽象类不能用于创建对象。纯虚函数没有具体的实现。抽象类至少包含一个纯虚函数。
静态数据成员要在类体外进行初始化。
友元函数破坏了封装,友元无 this 指针。友元函数不是类的成员函数。
一个抽象类的派生类可以实例化的必要条件是实现了所有的纯虚函数。
静态成员既可以通过对象名访问,也可以通过类名来访问。
下列运算符必须用友元函数重载的是左移右移运算符、* 、+ 、- 。 :: 不能重载。 -> 必须重载为类的成员函数。
构造函数不能重载运算符。
在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是作为成员函数的重载的 1 元运算符。
运算符重载不可以改变语法结构。
运算符重载可以通过成员函数来实现,或者通过友元函数来实现。
当用成员函数重载双目运算符时,运算符的左操作数必定是本类对象。
为了满足运算符“+”的可交换性,必须将其重载为友元函数。