C++继承

作业

1 (学生类设计).设计一个友元函数,
按照成绩从高到低的顺序输出姓名、学号和成绩信息。

参考1
class stu{
    friend void sort(stu stu[]);
private:
    int stu_name;
    int stu_hao;
    int stu_grade;
public:
    stu(int name,int hao,int grade);
};
stu::stu(int name,int hao,int age)
    :stu_name(name),stu_hao(hao),stu_grade(age){}

void sort(stu stu6[]){
    int i = 0;
    int j = 0;
    for(i=0;i<5;i++){
        for(j=0;j<5-i-1;j++){
            if(stu6[j].stu_grade > stu6[j+1].stu_grade){
                stu stu7(7,7,88);
                stu7 = stu6[j];
                stu6[j] = stu6[j+1];
                stu6[j+1] = stu7;
            }
        }
    }
    for(i=0;i<5;i++){
        printf("%d %d %d\n",stu6[i].stu_name,stu6[i].stu_hao,stu6[i].stu_grade);
    }
}
参考2
#include <iostream>
using namespace std;
class error{
public:
  error* next;

};
class wenti{
public:
    error *p;
};
void test( wenti &a);


stu::stu(int score , string name,stu* next = NULL):score(score),name(name),next(next){}

void stu::set(int score, string name,stu*next = NULL){
    this->score = score;
    this->name= name;
    this->next = next;

}
int stu::getscore(){
    return this->score;
}
string stu::getname(){
    return this->name;
}
void stu::setnext(stu*next){
    this->next = next;

}
stu* stu::getnext(){
    return this->next;

}
sort::sort(int num, stu* front= NULL, stu *rear = NULL):num(num),front(front),rear(rear){}

void insersort(sort& gg){
    int star = 1;
    while(star){
        cout<<"请输入学生的 分数 姓名" <<endl;
        stu* man = new stu(0," ",NULL);
        int score;
        string name;
        cin >> score>> name;
        man->set(score,name,NULL);
        if(gg.num ==0){
            gg.front = man;
            gg.rear = gg.front;
        }else{
            stu*p = gg.front;

            while(p){
                if(p->getscore() < man->getscore()){
                    man->setnext(p);
                    if(p == gg.front){
                        gg.front = man;
                        gg.rear = man;
                    }else{
                        while(1){
                            if(gg.rear->getnext() == p){
                                gg.rear->setnext(man);
                                gg.rear = gg.front;
                                break;
                            }
                            gg.rear = gg.rear->getnext();
                        }
                    }
                    break;
                }
                p = p->getnext();
            }
            if(!p){
                p = gg.front;
                while(p->getnext()){
                    p = p->getnext();
                }
                p->setnext(man);
            }
        }
        ++gg.num;
        cout<<"按0停止,按任意键继续"<<endl;
        cin>>star;
    }
}
注意:

//构造函数的缺省参数只能是最后的参数,而且不能在声明和实现中同时定义缺省的形式。
//但是,不在类外实现的话就没有问题了。

2 设计BOOK类

//包括ISBN号(string),书名(string),作者(string)以及单价信息,
//还能根据数量确定折扣率并计算应付款项, 折扣率五本以上90%,
//十本以上 80%,二十本以上70%。提示:只设计一个种类的书,
//设计适当的构造及析构函数(类声明和成员函数定义分离)。

#include <iostream>
using namespace std;
#include <string>
class BOOK{

private:
    string m_ISBN;
    string m_bookname;
    string m_writer;
    float m_price;
public:
    static int count;
    BOOK(string ISBN,string bookname,string writer,float price);
    friend float totalmoney(BOOK *p);
    ~BOOK(){}
};

int BOOK::count=0;

BOOK::BOOK(string ISBN="",string bookname="",
           string writer="",float price=0.0f)
    :m_ISBN(ISBN),m_bookname(bookname),m_writer(writer),m_price(price)
{
    count++;
}
//打折函数
float totalmoney(BOOK *p){
    if(NULL == p){
        return 0.0f;
    }
    float discount= 0;//折扣
    int i = BOOK::count;
    float t_money = 0.0f;
    while(i){
        t_money += p[i-1].m_price;
        i--;
    }
    i = BOOK::count;
    if(i<5){
        discount=1;
        return t_money*discount;
    }
    else if(i>=5&& i<10){
        discount = 0.9f;
        return t_money*discount;

    }
    else{
        discount = 0.8f;
        return t_money*discount;
    }
}
注意:
//静态成员变量也受访问权限的控制。
//初始化的方式不变。使用私有静态成员变量的方式同普通成员变量。
面向对象程序设计有4个主要特点:

(抽象)、封装、继承和多态性。

单继承语法
说明

1、子类拥有父类的所有成员变量和成员函数
2、子类可以拥有父类没有的方法和属性
3、子类就是一种特殊的父类
4、子类对象可以当作父类对象使用

派生类的访问控制

public继承:
父类成员在子类中保持原有访问级别
private继承:
父类成员在子类中变为private成员
protected继承:
父类中public成员会变成protected
父类中protected成员仍然为protected
父类中private成员仍然为private

C++中的继承方式(public、private、protected)会影响子类的对外访问属性

判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部、外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)

类型兼容规则(参考课件)

父类的指针或者引用可以子类对象;
父类指针(引用)做函数参数
可以让子类对象初始化父类(拷贝构造函数);

继承的对象模型
继承中的构造和析构

1个对象的初始化
2个对象的初始化(组合)
n个对象的初始化(继承)
调用顺序:先调用父类的构造,然后子类的构造
析构顺序相反。

继承和组合混搭

调用顺序: 先构造父类,再构造成员变量(组合类)、最后构造自己
先析构自己,在析构成员变量、最后析构父类
//先构造的对象,后释放

当子类成员变量与父类成员变量同名时

当派生类与基类有同名成员时,派生类中的成员将屏蔽基类中的同名成员。
同名成员变量和成员函数通过作用域分辨符进行区分

继承中的static变量

1、在继承体系中依然共享一份内存。
2、继承之后的访问权限与普通变量的访问控制权限一致。

问题:
常成员函数能不能修改static变量?
能。
能否定义 static 常成员函数?
不能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352