面向对象程序设计复习笔记

大一下学期面向对象程序设计c++复习整理

(考场打印版)

1、char a[50]

字符数组输入输出: char a[50]; cin>>a; cout<<a<<endl; 其它类型数组要用for循环一个个数据输入

字符数组长度要尽量大一点,结束符"\0"。

法一:将char* n_phone改成string ;法二:给n_phone分配空间,然后用strcpy拷贝 void student::setphone(char* phone) {     n_phone = new char[strlen(phone) + 1];     strcpy(n_phone, phone); }

字符数组拷贝strcmp()。strcpy在VS2019中记得关闭安全检查(右键属性-c/c++-代码生成-禁用安全检查)

单引号‘用于单个字符’A‘,大于长度1要用双引号。

字符指针数组 const char *pMonth[12] = { "January","February".....}

2、读取‘,’前的字符用 getline进行输入,如下所示

#include <string>

string  name;

getline(cin, name, ',');

 由于输入字符串中有空格,用 getline进行输入,如下所示

char a[50];

cin.getline(a, 50);

4、求最大最小的初始值时:使用系统最大最小值 INT_MIN    INT_MAX DBL_MIN   DBL_MAX FLT_MIN    FLT_MAX 提交到OJ是加上头文件limits.h

5、CVector c = a+b;拷贝构造

CVector c;

c = a+b;赋值运算符重载。

如果发现~CVector()中的delete注释掉来检查

6、oj提交错误显示CPU运行超时:

原因:死循环或者输入变量个数与题目不匹配。一定要改到return value 0 程序正常结束返回值0;

7、CDate类计今年到这天的天数:

class CDate
{
private:
    int year, month, day;
public:
    CDate(){}
    CDate(int y, int m, int d){.......}
    bool isLeapYear(){return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;}
    int getDayofYear(){
        int i=0, sum = day;
        int a[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        if (isLeapYear())
            a[2]++;
        // 求日期的天数
        for (i = 0; i < month; i++) sum += a[i];
        return sum;
}

计算两天的差:类内定义friend int operator -(const stu& x);类外定义如下:

 8、#include <algorithm>

数组:t[n]

sort(t, t + n);

9、静态数据成员记得在全局初始化:int Account::interestRate=0;

10、输出指定位数的小数

#include <iomanip>

cout <<fixed<< setprecision(2) << score.Average() << endl;

输出不够位补零

cout << setw(4) << setfill('0') << d.year;

继承与多态:

class CNewId :public COldId {
protected:
	char* pId18; CDate issueDay; int validYear;
public:
	CNewId(char* pIdVal2, char* pIdVal, char* pNameVal,
CDate& day, CDate& day2, int valid) :COldId(pIdVal, pNameVal, day), issueDay(day2) {
		validYear = valid;
		pId18 = new char[strlen(pIdVal2)+1];
		strcpy(pId18, pIdVal2);
	}//本题中余数与校验码的对应关系为1,0,X,9,8,7,6,5,4,3,2这种题记得用数组代替ifelse
}
---------------------------------------------------------------------------------
class CPeople{};
class CStudent :virtual public CPeople{};
class CTeacher :virtual public CPeople{};
class CGradOnWork :public CStudent, public CTeacher{};
CPeople c1(name, sex, age);
c1.print();
CStudent c2(name, sex, age, number, score);
c2.CPeople::print();//访问基类的成员函数时
c2.print();//访问子类自定义的成员函数时(定义时会把基类同名的函数覆盖掉)
CGradOnWork c4(.......);
c4.CPeople::print();
c4.CTeacher::print();
c4.print();

虚函数:

在函数前加上virtual即可:virtual void deposit(int m){}   子类基类里都有这个。

若要求用基类指针数组,使它每一个元素指向每一个派生类对象,做测试:基类指针指向子类对象,统一调用接口。

在基类定义纯虚函数:

virtual void Withdrawal(float amount) = 0;//设为0,其派生类被期待用一个具体的函数来重载。 

 对成员函数使用关键字final必须声明为virtual虚函数,因为只有虚函数才支持在子类中重写,这时final关键字才会发挥禁止重写的功能。

运算符重载

重载为类成员函数时   参数个数=原操作数个数-1    (后置++、--除外)

重载为友元函数时  参数个数=原操作数个数,且至少应该有一个自定义类型的形参。

friend Complex operator+(Complex& a,Complex& b);//类内定义//类外实现

赋值运算符‘=’、下标运算符‘[]’、成员选择运算符‘->’和函数调用运算符‘()’等不能用友元函数形式重载

类型转换运算符重载:

operator int()  return (rp.getX() - lp.getX()) * (lp.getY() - rp.getY());

使用时:CRectangle rect1;      cout<< (int)rect1;

 赋值运算符重载:

传入的参数需要声明为常量引用。释放实例自身已有的内存,如果在分配新内存前忘记释放自己已有的内存,则会出现内存泄漏。 判断传入参数与当前实例是不是同一个实例,如果是同一个,则立即返回

 

 

IO运算符重载

 

模板

函数模板 找出票数最高的:

求数组中的最大元素和第二大元素(友元)

矩阵乘法(运算符重载)

 

(格式也没怎么整理了,明天考试,就,加油吧)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值