C++:面向对象
2021-07-12 07:07
标签:友元 hda sage 无法 ram 空字符串 消息 不同的 类型转换 面向对象的特性 Abstraction(抽象) Polymorphism(多态) Inheritance(继承) Encapsulation(封装) 类的定义 class Circle{ public: double radius; Circle(){ radius = 1; } Circle(double r){ radius = r; } double getArea(){ return radius*radius*3.14159; } }; 类是一种数据类型 对象指针:用指针访问对象成员 Circle circle1; Circle *pCircle = &circle1; 两者效果相同: (*pCircle).radius pCircle->radius 在堆上创建对象 在函数中声明的对象都一般在栈上创建,函数返回后对象就被销毁。为了保留对象,可以用new运算符在堆上创建它。 ClassName *pObject = new ClassName(); delect pObject; //当程序结束时动态对象会被系统销毁,程序员也可以手动显示销毁 创建string对象 用无参构造函数创造一个空字符串 string newString; 用一个字符串常量创建string对象 string message("Aloha World"); 用字符串数组创建string对象 char charArray[] = {‘H‘,‘e‘,‘l‘,‘l‘,‘o‘,‘\0‘}; string message1(charArray) 内建指针this:指向当前函数的调用对象 构造函数的初始化 当类的数据域是一个对象类型,而且当这个对象的类本身没有无参构造函数时,须通过初始化列表来初始化对象。 静态成员 可以通过类或者对象调用静态函数,只能通过对象调用非静态函数。 当变量或者函数不依赖于类的实例时,可以将此变量/函数定义为静态。 析构函数 友元:通过friend声明友元函数或者友元类,从而可以通过友元访问private成员 拷贝构造函数(copy constructor) ClassName(ClassName&) 唤起拷贝构造函数: ClassName obj1(obj2); 或 ClassName obj1 = obj2; //只能在初始化时拷贝 浅拷贝:拷贝指针,而非指针所指向的内容 深拷贝:获取原指针的内容,创建新指针,拷贝原指针指向的内容到新指针里 定制深拷贝构造函数: Person::Person(Person& person){ id = person.id; Date* p = person.getBirthDate(); birthDate = new Date(*p); } Vector类 继承 DerivedClass(parameterList) : BaseClass() { } DerivedClass(parameterList) : BaseClass(argumentList) { } 多态:不同的对象对相同的消息有不同的相应 联编:确定具有多态的语句调用哪个函数的过程 -> 静态联编:在程序编译时确定调用哪个函数(函数重载) -> 动态联编:在程序运行时才确定调用哪个函数(运行时多态) 虚函数(virtual) 如何实现函数的动态联编: 1)基类定义同名虚函数 2)访问对象的成员函数时,要用指向对象的指针或者对象引用 基类与派生类中有同名函数时: 1,通过派生类对象访问同名函数 -> 静态联编 2,通过基类对象的指针访问同名函数 -> 静态联编 3,通过基类对象的指针访问同名虚函数 ->动态联编 抽象类:完全无法实例化的类 纯虚函数: 在抽象类GemoetricObject里定义函数virtual double getArea() = 0; 动态类型转换 C++:面向对象 标签:友元 hda sage 无法 ram 空字符串 消息 不同的 类型转换 原文地址:https://www.cnblogs.com/bl8ck/p/9538405.html