注意最后复习:文件操作,输入输出流。错题集,类的相关细节:类模板等,上机编程大题
12.6 p25 |
---|
12.7 p31 |
12.8 p |
类继承、拷贝构造、虚函数等
如果不是父类指针调用子类构造函数,则虚函数加不加无所谓,子类对象仍会先调用子类的析构函数,再调用基类的析构函数!
3.What is the output of the following? (4 score)
#include <iostream>
using namespace std;
class A {
public:
A(){cout << ".";}
~A(){cout << ".";}
};
class B : public A {
A _a;
public:
B(){cout << ".?";};
~B(){cout << "!.";};
};
B b;
int main() { }
B b先调用父类A的构造函数,然后调用自己的,构造 2次
析构时,先析构自己的~B再析构父类的 ~A,析构2次
多继承时候注意,如果继承的多个父类有同名函数,调用时指顶父类命名空间A::
解决了孙子MUle不知道是调用哪个父亲继承爷爷的函数,实际上都是一个爷爷的函数。
虚继承的构造函数优先普通继承调用,与构造相反顺序调用析构
Sizeof对象输出
设置protected访问权限的基类成员,对于派生类和外部函数有何影响?
派生类的成员函数可直接访问该基类成员,外部函数则不能直接访问。
如果example加上&o则少析构一次
dog: high
dog: low
dog: smaller
//此处父类p调用的是无参数fb,B类无法提供,因此只能调用dog类,
如果将B类fb的默认参数去掉则调用B类fb
dog: middle
dog: black
算法类程序填空
字符串结尾’\0’不是’\n’
对字符串大写操作前检查其是否在’a’~'z’
2. 利用展开式y=1/1!-2/2!+3/3!-…..,求y的近似值。(每空1.5分,共7.5分)
(5)return p
(6) fabs(x1-x0)>1e-6
(7) x0=x1
(8) 1.0*j*i/fc(i)
(9) –1*j
输出:y=0.367879
表达式、运算符细节
if (i % 3) 表示i%3!=0 而不是i%3==1
x=6,x-=x*x x=6-6*6=-30
x+=-30 x=x-30=-30-30=-60
区别下题:
遇到&&和|| 一定要注意短路原则:
&&前遇到0后面就不执行,结果直接返回0
||前面遇到1后面也不执行,结果直接返回1
多个if语句只有1个else
else与其最近的if配套
主函数int main{ }在前,函数fun{…}定义在后时,一定要在主函数前先声明void fun();
计算除法时注意int型需要转为double型
f1*1.0/f2
或1.0*f1/f2
或 (double) f1/f2
整形f1,f2化成浮点型
补充switch语句时注意有没有break;没有需要补充
执行到default语句那怕没有break也会跳出
宏定义#define问题,不要自己想当然给运算加括号,直接带入原来的定义,注意乘号优先级
链表类模板
operator运算符重载+类模板
只输出a:
#include<iostream>
using namespace std;
class point
{
public:
point(int a, int b):x(a), y(b){}
point& operator++()
// 前置++
{
This->x++;
This->y++;
return *this; //返回对象引用
}
point operator++(int)
//后置++
{
point a = *this;
// 或者++a;
a.x++;
a.y++;
return a; //返回对象
}
private:
int x;
int y;
};
字符串处理
(1) strlen(s)+1
(2) [ ]st
(3) String
(4) st