关于C++的疑问剖析
2024-08-26 15:53:29
1)众所周知,抽象类是不存在对象的,只提供接口而不提供实现。但是抽象类能不能作为一个类指针,指向其子类的对象呢?
class Interface {
public:
virtual void fun() = ;
}; class Implement: public Interface {
public:
void fun() {
cout<<"This is Implement object."<<endl;
}
}; int _tmain(int argc, _TCHAR* argv[])
{
Interface *obj = new Implement();
obj->fun();
return ;
}
结论:能。抽象类不能拥有自己的类对象,但是,可以定义抽象类指针指向其子类的对象。
2)指向指针的指针 两种最常见的情形:(数组的名字会退化成其首元素的指针。)
2.1 指针数组:
class Shape {
public:
void testFunc() {
cout<<"Shape::testFunc()"<<endl;
}
//...
}; Shape *picture[]; int _tmain(int argc, _TCHAR* argv[])
{
Shape **temp = picture;
Shape *p = *temp;
p->testFunc();
return ;
}
2.2
void scanTo(const char **p, char ch) {
while (**p && **p != ch) {
++*p;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char s[] = "hello, World";
const char *cp = s;
scanTo(&cp, ',');//将指针cp移动第一个“,”出现的位置
cout<<*cp<<endl;
return ;
}
3)仿函数
//仿函数 加法
template <class T>
struct plus {
T operator() (const T& x, const T& y) const {
return x+y;
}
}; //仿函数 减法
template <class T>
struct minus {
T operator() (const T& x, const T& y) const {
return x-y;
}
}; int _tmain(int argc, _TCHAR* argv[])
{
//以下产生仿函数对象
plus<int> plusObj;
minus<int> minusObj;
//以下使用仿函数,就像使用一般函数一样
cout<<plusObj(,)<<endl;
cout<<minusObj(,)<<endl; //以下直接产生仿函数的临时对象(第一对小括号),并调用之(第二对小括号)
cout<<plus<int>()(,)<<endl;
cout<<minus<int>()(,)<<endl;
return ;
}
最新文章
- ASP.NET Core 中文文档 第三章 原理(11)在多个环境中工作
- SQL 归来
- ios 下创建,删除文件夹的方法
- JS 基础 入门
- iTunesConnect进行App转移
- Oracle User Calls 和 Executions 两个概念的区别
- 输入DStream和Receiver详解
- (转)javaScript插件开发
- python学习2——数据类型
- HW3.23
- 【java】Windows7 下设置环境变量
- I - u Calculate e
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
- Selenium测试专项三班隆重开班
- 学问Chat UI(4)
- 如何用java发送Http的post请求,并传递参数
- HDU 6373(斜面上小球弹跳 运动分解)
- Android使用ksoap2调用C#中的webservice实现图像上传
- 通过kubernetes构建ela服务
- java.lang.NoSuchMethodError: org.springframework.web.context.ConfigurableWebApplicationContext.getEnvironment()Lorg/springframework/core/env/ConfigurableEnvironment;问题