基类和派生类可以同名吗,如果可以的话,怎么区分基类和派生类呢
不可以重名,重名了就没法区分了。
派生类和基类在使用时可以通过名字来区分,另外,在实现的时候也可以区分:
基类的写法一般是 class 基类名
派生类的写法一般是 class 派生类名 : public 基类名
public/private/protected几种继承方式根据需要选择。
示例:
class Person //定义Person基类
{
}
class Student:public Person //定义Student派生类,继承Person基类
{
}
Person ps; //定义基类实例
Student stu; //定义派生类实例
不可以,同名类会报类重定义,别说派生不派生了
基类和派生类可以同名,但是为了避免混淆,一般不建议这么做。如果确实需要同名,可以使用作用域限定符来区分基类和派生类。
例如:
class Animal {
public:
virtual void eat() {
cout << "I am eating" << endl;
}
};
class Cat : public Animal {
public:
void eat() {
cout << "Cat is eating" << endl;
}
};
int main() {
Cat c;
c.eat(); // 输出 Cat is eating
c.Animal::eat(); // 输出 I am eating
return 0;
}
在这个例子中,基类 Animal 和派生类 Cat 中都定义了 eat() 函数,但是通过作用域限定符可以区分它们。在 Cat 类的 eat() 函数中,我们可以通过调用 Animal::eat() 函数来调用基类的 eat() 函数。
人有体力、情商、智商的高峰日子,他们分别每隔23天,28天和33天出现一次。对于每个人,我们想知道何时三个高峰落在同一天。给定三个高峰出现的日子落在同一天的日子是p,e和i(不一定是第一次高峰出现的日子),在给定另一个制定的日子d。
你的任务是输出日子d之后,下一次三个高峰落在同一天的日子(用距离d的天数表示)。
例如:给定日子为10,从下次出现三个高峰同一天的日子是12,则输出2。
解题思路:
从d+1天开始,一直到21252天,对于其中每个日期k,看是否满足。
(k-p)%23 ==0 && (k-e)%28 == 0 && (k-i)%33 == 0
注意:不需要一个一个去试,有些数可以直接排除掉。
因为23是个素数,23和28之间没有公因数,23和28的乘积才是体力、情商和智商同时高峰的日子。
#include <iostream>
#include <cstdio>
using namespace std;
#define N 21252
int main()
{
int p,e,i,d,caseNo=0;
while(cin>>p>>e>>i>>d && p!=-1 && e!=-1 && i!=-1 && d!=-1)
{
caseNo++;
int k;
for(k=d+1;(k-p)%23;k++);
for(;(k-e)%28;k+=23);
for(;(k-i)%33;k+=23*28);
{
cout<<"Case"<<caseNo;
cout<<":the next triple peak occurs in "<<k-d<<" days."<<endl;
}
}
return 0;
}
cout的用法