前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >复习C++&笔记

复习C++&笔记

作者头像
gojam
修改2019-05-14 16:04:30
3960
修改2019-05-14 16:04:30
举报
类与对象
  • 1、静态成员函数没有this指针,静态成员变量可以通过classname::或object.调用,声明非常量静态成员时,需要在类中加static前缀但不能定义或初始化,在类外定义和初始化但不能再加static前缀(不方便编译器判断这是全局静态变量或属于某一个类)。
  • 2、类中函数参数表后加const则函数不能修改类的数据成员。
  • 3、友元函数都在类外定义,不能加上classname::前缀。友元函数没有this指针,可以访问类中的所有数据成员。
  • 4、this指针只在成员函数里有定义,创建一个对象后不能直接取得this指针的位置。
  • 5、构造函数可以有参数,析构函数没有参数,他们都没有返回值。
  • 6、struct和class和union都可以用来定义对象,但struct默认全部公有,class默认全部私有。union不支持继承,默认全部成员公有,union实际只能存放一个成员变量,但可以作为其中包含的任意一种变量被使用,union所占的内存空间也由其中占空间最大的类型决定,union也可以拥有成员函数(union一般用的比较少,仅供了解)。
虚函数与虚继承
  • 7、类的虚继承指继承的方式,虚基类是相对于继承的类来说的(而不是基类的属性)。虚基类解决了多继承中父类存在多个共同基类实例的问题(非虚继承的情况下,如B、C继承A,D继承B、C,则D型对象继承了B-A和C-A两个不同的基类),从而共享A的数据成员。
  • 8、当继承关系满足:基类A-基类B(虚继承基类A)-派生类C。派生类的构造函数的执行顺序:基类A、基类B、对象成员、派生类。通常在多继承中会出现多个基类B虚继承基类A,基类A的构造函数首先被调用,基类B不调用A类的构造函数。
  • 9、虚函数用法
#include <iostream>
using namespace std;
//一个计算几何体周长体积的程序
class Circle{
public://我差点没写?私有构造函数海星
    Circle(double radiu){
        radius=radiu;
    }
    virtual double area(){
        return 3.14*radius*radius;
    };
    virtual double volume(){
        return 0;
    };
protected://这里声明为protected,如果是private,重载的虚函数不能使用这些数据成员
    double radius;
};

class Sphere:public Circle{//这里一定要声明public,否则默认private,基类指针访问不了子类的继承的数据成员
public:
    Sphere(double radius):Circle(radius){
        
    }
    double volume(){
        return 100+4/3.0*3.14*radius*radius*radius;
    }
    double area(){
        return 200+4*3.14*radius*radius;
    }
};
class Column:public Circle{
public:
    Column(double radius, double heigh):Circle(radius),height(heigh){
        
    }
    double volume(){
        return 300+3.14*radius*radius*height;
    }
    double area(){
        return 400+3.14*radius*radius*2+2*3.14*radius*height;
    }
private:
    double height;
};

int main(){
    Sphere ball(1);
    cout<<ball.area()<<endl<<ball.volume()<<endl;
    Column col(1,1);
    cout<<col.area()<<endl<<col.volume()<<endl;
    Circle* ptr;//多态通过基类指针的移动实现
    ptr=&ball;
    cout<<ptr->area()<<endl<<ptr->volume()<<endl;
    ptr=&col;
    cout<<ptr->area()<<endl<<ptr->volume()<<endl;
    return 0;
}
#include <iostream>
using namespace std;

class teacher{
public:
    teacher(double pe){
        peroids=pe;
    }
    virtual int total(){
        return 0;
    }
protected:
    int peroids;
};

class pro:public teacher{
public:
    pro(double pe):teacher(pe){
        
    }
    int total(){
        return 5000+50*peroids;
    }
};

class proAssistant:public teacher{
public:
    proAssistant(double pe):teacher(pe){
        
    }
    int total(){
        return 3000+30*peroids;
    }
};

class lecture:public teacher{
public:
    lecture(double pe):teacher(pe){}
    int total(){
        return 2000+20*peroids;
    }
};

int main(){
    teacher* ptr;
    pro a(10);
    proAssistant b(10);
    lecture c(10);
    ptr=&a;
    cout<<ptr->total()<<endl;
    ptr=&b;
    cout<<ptr->total()<<endl;
    ptr=&c;
    cout<<ptr->total()<<endl;
    return 0;
}
流对象
  • 10、常见的文件打开模式:ios::in 打开并读取, ios::out 打开以写入, ios::trunc 覆盖模式, ios::ate 读文件指针位于文件末尾。如果需要创建新文件,可以用out,也可以用in、out、app的组合。文件打开模式组合较多,详情见相关网站。
  • 11、关于流的方向:in和out是相对于与流操作的对象来说的,比如cin>>a,cin将键盘输入传给a,也就是a的in(输入);cout<<a时a的内容传给cout进而传给显示器,a的内容out(输出)了;文件对象同上,in模式文件对象fs使用>>运算符,将fs的内容传给右边的对象。运算符总能表示流的方向。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年11月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类与对象
  • 虚函数与虚继承
  • 流对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档