面向对象学习【c++】

c++太弱了(其实是一点都不会!)

挖个坑来学习c++!

不间断更新!

代码1:

#include <math.h>
#include <limits.h>
#include <complex>
#include <string>
#include <functional>
#include <iterator>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <bitset>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <iostream>
#include <ctime>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <assert.h>

using namespace std;
/*
    类编译时 首先编译成员 再编译函数体
    所以 成员函数可以直接使用类中的其他成员 无须在意出现的次序
    成员函数在类内部声明  内部或外部定义
*/
class Sale_data
{
public :
    Sale_data() = default;//默认构造函数
    Sale_data(const string &s ,double p) ://构造函数
        bookNo(s) ,revenue(p) { }

    double avg_price() const;
    string isbn() const
    {
        return this->bookNo;//this 为 常量指针
    }
    Sale_data& combine(const Sale_data&);

    friend bool comare(Sale_data &is)//友元函数  可访问私有成员
    {
        return is.is_ok;
    }
    string bookNo = "you are a pig";
    unsigned units_sold;
    double revenue;

private:
    bool is_ok;

};

double Sale_data::avg_price() const//在外部定义函数体
{
    if (units_sold)
        return revenue / units_sold;
    else
        return 0;
}

Sale_data& Sale_data ::combine(const Sale_data &rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;//返回调用该函数的对象
}

////////////声明函数

Sale_data add(Sale_data&,const Sale_data&);
std::ostream &print(std::ostream&, const Sale_data&);
std::istream &read(std::istream&, Sale_data&);

////////////定义 read print 函数

istream &read(istream& is, Sale_data& item)
{
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = price * item.units_sold;
    return is;
}

ostream &print(std::ostream& os, const Sale_data& item)
{
    os << item.isbn() << " " << item.units_sold << " "
        << item.revenue << " " << item.avg_price() << endl;
    return os;
}
////////////定义 add 函数

Sale_data add(Sale_data& rhs, const Sale_data& lhs)
{
    Sale_data sum = lhs;// 存放和
    sum.combine(rhs);
    return sum;
}

//////////// 类外部定义构造函数
/*
Sale_data::Sale_data(std::istream &is)
{
    read (is, *this);//read 函数从 is 读取数据存入this对象中
}
*/

////////////
Sale_data total;
Sale_data trans;

/////////// 主函数
int main()
{
    cout << total.isbn() << endl;
    total.combine(trans);

    ///////// 类的拷贝
    total = trans;
    //等价于
    total.bookNo = trans.bookNo; //bookNo等成员。。。

    return 0;
}

代码2:

#include <math.h>
#include <limits.h>
#include <complex>
#include <string>
#include <functional>
#include <iterator>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <bitset>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <iostream>
#include <ctime>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <assert.h>

using namespace std;

class Screen
{
public:
    typedef string::size_type pos;//定义类型的成员必须先定义 后使用
    //using pos = string::size_type;
    Screen() = default;
    Screen(pos ht) :hight(ht) { }
    string get() const
    {
        return contents;
    }
    Screen &move(pos r, pos c);
    Screen &set(char);
private:
    pos cursor = 0;
    pos hight = 0, width = 0;
    string contents;
};

inline Screen&  Screen::move(pos r,pos c) //inline用于定义内联函数
{
    pos row = hight * width;
    cursor = hight + 1;
    return *this;
}
//函数重载: 函数名形同 参数个数 类型 不同的函数

inline Screen &Screen::set(char c)
{
    contents[cursor] = c;
    return *this;
}

Screen myscreen;

int main()
{
    myscreen.set(‘#‘);
    return 0;
}

代码3:

class Screen
{
public:
    friend class Window_mgr;// 友元类 友元关系不传递
    friend void Window_mgr::clear(); // 其他类的函数的友元
private:

};

class  Window_mgr
{
public:
    void  clear();
private:

};

Screen myscreen;

int main()
{
    return 0;
}
时间: 2024-10-25 08:40:00

面向对象学习【c++】的相关文章

面向对象学习笔记

abstract:抽象类或方法的关键字注意事项:一个类中至少有一个抽象方法不允许有大括号主要意义就是规范方法,要求必须按照抽象中的方法来写继承抽象类的类,必须重载完全抽象类的方法抽象类是不能被实例化的,因为本身没有意义 extends 继承的关键字 类中常用的关键字:final 被定义的类不能被继承,该类的方法不能被继承,相当于一个锁的功能self self::静态成员,相当于类名称::静态成员,和this是有区别的,$this访问类中的内容必须实例化,而self是直接可以访问类中的内容的,多用

php面向对象学习

php面向对象学习 近期跟着别人开发一套php程序,深感自己面向对象很白痴,于是再次巩固了一下面向对象的学习,自己整理了一下这几天面向对象的东西,给大家分享!! 面向对象的三大特性: 封装 -- 隐藏内部实现,稳定外部接口 继承 -- 子类继承父类成员,实现代码复用 多态 -- 不同子类对同一消息做出不同的反映 一.接口 -- 是一套规范,遵守这个规范就可以实现功能 在PHP中,接口同样是一种规范和标准,可以约束类的行为,定义一个接口不指定具体的实现. 接口是把隐式公共方法和属性组合起来,以封装

面向对象学习【类-匿名类】

匿名类是就就像这个词一样,是一个没有名字的类,看到这个匿名类有点迷糊了,如果大家想想一个类没有名称的话那么我们如何来使用他创建实例呢?答案就是我们可以使用 var 来声明一个匿名的类,创建的格式为: new anonymousClassName{字段1,字段2,........} 说明: 匿名类当中的字段都全部都是public类型的,这就意味着我们可以在外部随意有访问这个所谓的匿名类: 看着这么爽其实这个匿名类还有很多的限制如: 1.使用匿名类时,必须对其初始化: 2.只能包含public字段;

面向对象学习【类-静态类】

静态类只能包含静态成员(使用该类创建的所有对象将共享这些成员的同一个副本).静态类纯粹作为工具方法和字段的一个容器来使用.静态类不能包含任何实例数据或方法.另外,使用new操作符来创建静态类的一个对象是没有意义的.如果坚持这样做,编译器会报错.如果需要执行任何初始化,那么static类可以包含一个默认的构造器,前提是该构造器也被声明为static.其他任何类型的构造器都是非法的,编译器会报错: 比如自己定义一个Math类,其中只包含静态成员,那么应该像下面这样写: public static c

Delphi面向对象学习(-)

Delphi面向对象学习随笔一:类与对象的关系作者:巴哈姆特http://www.cnpack.org(转载请注明出处并保持完整)工作几年了,总想做点总结,于是有了这篇东西,叫随笔吧呵    本文只是写写我对对象化的理解,主观成分很多,或许有错误,希望大家指正^_^    PS: 本文的演示代码均以Delphi 的Object Pascal语法为准. 类与对象的关系    要讨论类与对象的关系,需要先说一下什么是类,什么是对象. 类:    类.我认为是一个集合,和数学中的集合一样,是一类事物的

Php面向对象学习笔记 – 构造、析构、对象赋值、克隆

Php面向对象学习笔记 – 构造.析构.对象赋值.克隆 class student { public  $stu_id;       // 定义成员变量 public  $stu_name; public  function sayName()   // 成员函数 { echo $this->stu_name;   // $this  访问该对象的成员变量 } } $stu = new  Student;      // 创建对象 $stu->stu_id = '0607001'; $stu-

js面向对象学习 - 对象概念及创建对象

原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数据属性和访问器属性. 1.数据属性又包含 Configurable //表示能否通过delete删除,默认为true: Enumerable //表示能否通过for-in循环返回属性,默认为true; Writable  //表示能否修改属性的值,默认为true; Value            

javascript面向对象学习笔记(二)——创建对象

javascript面向对象学习笔记(二)--创建对象 工厂模式 该模值抽象了创建具体对象de过程.用函数来封装噫特定接口创建对象的细节. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var person1=createPerson("Chiaki&

JavaScript之面向对象学习七(动态原型模式和寄生构造函数模式创建自定义类型)

一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可能会感到非常困惑.因为对象在其他oo语言中往往是封装在一块的,而构造函数确是和原型分开的,所以并没有真正意义上的封装,所以动态原型模式正是致力与解决这一问题的一个方案! 动态原型模式将所有的信息都封装在构造函数中(包括原型和实例属性),通过在构造函数中实例化原型(仅在必要的情况下)实现封装,又保持了

面向对象学习

###07.01_面向对象(构造方法Constructor概述和格式)(掌握) A:构造方法概述和作用 给对象的数据(属性)进行初始化 B:构造方法格式特点 a:方法名与类名相同(大小也要与类名一致) b:没有返回值类型,连void都没有 c:没有具体的返回值return; ###07.02_面向对象(构造方法的重载及注意事项)(掌握) A:案例演示 构造方法的重载 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表 B:构造方法注意事项 a:如果我们没有给出构造方法,系统将