面向对象编程进阶
目录
- 正规程序类定义的写法
- 类的指针
- 继承
- 继承中的访问控制
- 构造函数和析构函数
- 多态和虚函数
正规程序类定义的写法
class student { // 类定义
public: // 公共属性,一般方法放publicbool set(int a);bool read() const; // 后面加const,只读不写student(); // 构造函数,里面有默认参数student(int a); // 传参private: // 私有属性int age;string name;
};
类的指针
student *p = new student(20, "张三"); // 新建一个student对象,类指针指向这个对象
p->name; // 这个新对象的name
delete p; // 调用析构函数
继承
student *p1; // 新建一个student父类指针
postgraduate *p2; // 新建一个子类指针
student a;
postgraduate b; // 新建父类对象a,子类对象b
p1 = &a; // 父类指针指向父类对象
p2 = &b; // 子类指针指向子类对象p1 = &b; // 父类指针指向子类对象,可以
p2 = &a; // 子类指针不可以指向父类对象
继承中的访问控制
在C++中,继承可以是公有的(public
)、保护的(protected
)或私有的(private
)。默认情况下,如果没有指定,继承是公有的。
class Base {
public:void baseFunc() {}
};class Derived : public Base { // 公有继承void derivedFunc() {baseFunc(); // 可以访问基类的公有成员}
};
构造函数和析构函数
在继承中,基类的构造函数和析构函数不会被自动调用,需要在子类的构造函数和析构函数中显式调用。
class Base {
public:Base() {cout << "Base constructor called" << endl;}~Base() {cout << "Base destructor called" << endl;}
};class Derived : public Base {
public:Derived() : Base() { // 显式调用基类构造函数cout << "Derived constructor called" << endl;}~Derived() {cout << "Derived destructor called" << endl;// 注意:基类析构函数会自动调用,不需要显式调用}
};
多态和虚函数
多态是面向对象编程的一个重要特性,它允许通过基类指针或引用调用派生类的函数。
class Base {
public:virtual void func() { // 虚函数cout << "Base function called" << endl;}
};class Derived : public Base {
public:void func() override { // 覆盖基类的虚函数cout << "Derived function called" << endl;}
};int main() {Base *b = new Derived();b->func(); // 多态,调用Derived的funcdelete b;return 0;
}
在这个例子中,即使 b
是 Base
类型的指针,但由于多态,调用的是 Derived
类的 func
函数。