c++不允许使用抽象类类型对象,我明明每个函数都实现了的

图片说明
上代码:

 Stack.h:

#pragma once

//栈定义
template
class Stack
{
public:
const int maxSize = 50;
Stack();
virtual void Push(const T& x) = 0;
virtual bool Pop(T& x) = 0;
virtual bool getTop(T& x)const = 0;
virtual bool IsEmpty()const = 0;
virtual bool IsFull()const = 0;
virtual int getSize()const = 0;

};

 LinkedStack.h:

#pragma once

#include "Stack.h"
#include "Nodes.h"
#include
using namespace std;

template
class LinkedStack:public Stack //链式栈
{
public:
LinkedStack() :top(NULL){}
~LinkedStack(){ MakeEmpty(); }
void Push(const T& x);
bool Pop(T& x);
bool GetTop(T& x)const;
bool IsEmpty()const{ return (top == NULL) ? true : false; }
int GetSize()const;
void MakeEmpty();
friend ostream& operator<<(ostream& os, LinkedStack& s);
private:
LinkNode *top;
};

template
void LinkedStack::MakeEmpty()
{
LinkNode *p;
while (top)
{
p = top;
top = top->link;
delete p;
}
}

template
void LinkedStack::Push(const T& x)
{
top = new LinkNode(x, top);
assert(top);
}

template
bool LinkedStack::Pop(T& x)
{
if (IsEmpty())
return false;
LinkNode *p = top;
x = p->data;
top = top->link;
delete p;
}

template
bool LinkedStack::GetTop(T& x)const
{
if (IsEmpty())
return false;
x = top->data;
return true;
}

template
int LinkedStack::GetSize()const
{
int count = 0;
LinkNode *p = top;
while (p)
{
p = p->link;
count++;
}
return count;
}

template
ostream& operator<<(ostream& os, LinkedStack& s)
{
os << "栈中元素个数:" << s.GetSize() << endl;
int i = 1;
LinkNode *p = s.top;
while (p)
{
os << i++ << ":" << p->data << endl;
p = p->link;
}
return os;
}

template
bool LinkedStack::IsFull()const
{
return false; //链表栈空间无限制,不会满
}

 BinaryTree.h:

#include
#include "LinkedStack.h"
using namespace std;

template
struct BinTreeNode //二叉树节点类定义
{
T data;
BinaryTreeNode *leftChild,*rightChild;
BinaryTreeNode() :leftChild(NULL), rightChild(NULL){}
BinaryTreeNode(T x, BinaryTreeNode *l = NULL, BinaryTreeNode *r = NULL) :data(x), leftChild(l), rightChild(r){}
};

template
class BinaryTree //二叉树类定义
{
public:
BinaryTree() :root(NULL){}
BinaryTree(T value) : refValue(value), root(NULL){}
BinaryTree(BinaryTree& s);
~BinaryTree(){ destroy(root); }
bool IsEmpty(){ return (root == NULL) ? true : false; }
BinTreeNode *GetParent(BinTreeNode *current)
{
return (root == NULL || root == current) ? NULL : GetParent(root, current);
}
BinTreeNode *GetLeftChild(BinTreeNode *current)
{
return (current == NULL) ? NULL : current->leftChild;
}
BinTreeNode *GetRightChild(BinTreeNode *current)
{
return (current == NULL) ? NULL : current->rightChild;
}
int GetHeight(){ return Height(root); } //返回树高度
int GetSize(){ return Size(root); } //返回节点数
BinTreeNode *GetRoot()const{ return root; }
void PreOrder(void(*visit)(BinTreeNode *p)) //前序遍历
{
PreOrder(root, visit);
}
void InOrder(void(*visit)(BinTreeNode *p)) //中序遍历
{
InOrder(root, visit);
}
void PostOrder(void(*visit)(BinTreeNode *p)) //后序遍历
{
PostOrder(root, visit);
}
void LevelOrder(void(*visit)(BinTreeNode *p)); //层次序遍历
int Insert(const T& item);
BinTreeNode *Find(T& item)const;

protected:
BinTreeNode *root; //根指针
T refValue; //数据输入停止标识
void CreateBinTree(istream& in, BinTreeNode *& subTree);
bool Insert(BinTreeNode * & subTree, const T& x);
void Destroy(BinTreeNode * & subTree);
bool Find(BinTreeNode * subTree, const T& x)const;
BinTreeNode * Copy(BinTreeNode * orignode);
int GetHeight(BinTreeNode * subTree);
int GetSize(BinTreeNode * subTree);
BinTreeNode * GetParent(BinTreeNode * subTree, BinTreeNode * current);
BinTreeNode * Find(BinTreeNode * subTree, const T& x)const;
void Traverse(BinTreeNode * subTree, ostream& out); //前序遍历输出
void PreOrder(BinTreeNode& subTree, void(*visit)(BinTreeNode * p)); //前序遍历
void InOrder(BinTreeNode& subTree, void(*visit)(BinTreeNode * p)); //中序遍历
void PostOrder(BinTreeNode& subTree, void(*visit)(BinTreeNode * p)); //后序遍历
friend istream& operator >> (istream& in, BinaryTree& Tree); //重载操作:输入
friend ostream& operator << (ostream& out, BinaryTree& Tree); //重载操作:输出
};

template
void BinaryTree::Destroy(BinaryTree * subTree)
{
if (subTree != NULL) //递归终止条件
{
Destroy(subTree->leftChild);
Destroy(subTree->rightChild);
delete subTree; //必须先删除左右子女树再删除自己,若先删除自己,则leftChlid,rightChild不存在,无法访问子女树
}
}

template
BinTreeNode * BinaryTree::GetParent(BinTreeNode * subTree, BinTreeNode * current)
{
//私有函数,从subTree节点开始,搜索节点current的父节点
if (subTree == NULL)
return NULL;
if (subTree->leftChild == current || subTree->rightChild == current)
{
return subTree;
}
BinTreeNode * p;
if (p = GetParent(subTree->leftChild, current) != NULL) //递归在左子树中搜索
return p;

else
return GetParent(subTree->rightChild, current); //递归在右子树中搜索
}

template
void BinaryTree::Traverse(BinTreeNode * subTree, ostream& out)
{
//私有函数,前序输出subTree二叉树的所有数据
if (subTree != NULL)
{
out << subTree->data << '';
Traverse(subTree->leftChild,out);
Traverse(subTree->rightChild,out);
}
}

template
ostream& operator << (ostream& out, BinaryTree& Tree)
{
//重载操作,输出一颗二叉树Tree
out << "二叉树的前序遍历\n";
Tree.Traverse(Tree.root, out);
out << endl;
return out;
}

template
istream& operator >> (istream& in, BinaryTree& Tree)
{
//重载操作,输入并建立一颗二叉树Tree
CreateBinTree(in, Tree.root);
return in;
}

void CreateBinTree(istream& in, BinTreeNode * &BT)
{
//从输入流in输入二叉树的广义表表示建立对应点的二叉链表
LinkedStack *> s;
BT = NULL;
BinTreeNode *p, *t;
int k; //用k作为处理左右子树的标记
char ch;
in >> ch;
while (ch != '#') //书上是 ch!=RefValue
{
switch (ch)
{
case '(':
s.Push(p);
k = 1;
break;
case ')':
s.Pop(t);
break;
case ',':
k = 2;
break;
default:
p = new BinTreeNode(ch);
if (BT == NULL)
BT = p;
else if (k==1)
{
s.GetTop(t);
t->leftChild = p;
}
else
{
s.GetTop(t);
t->rightChild = p;
}
}
in >> ch;
}
}

 Main.cpp:

#include
using namespace std;
#include "BinaryTree.h"

void main()
{
BinTreeNode * node=NULL;
//BinaryTree * p = new BinaryTree('#');
CreateBinTree(cin, node);

system("pause");

}

这代码怎么格式不对啊……
需要的话我可以发源码

c++

1个回答

C,C++是区分大小写的,注意大小写的问题

wenbo228228
wenbo228228 你叼!!!这个细节都发现了,我以后一定会注意命名的,多谢!!!
接近 4 年之前 回复
lm_whales
lm_whales 回复wenbo228228: 你的函数命名,混合了两种编码规范,一些函数大写字母开头,一些函数小写字母开头,所以很不容易发觉
接近 4 年之前 回复
lm_whales
lm_whales 这两个函数都是这个样子的,你自己再找找看
接近 4 年之前 回复
lm_whales
lm_whales GetSize()const; 和 virtual int getSize()const = 0; 不同所以 int getSize()const 这个函数没实现,依然是抽象类
接近 4 年之前 回复
lm_whales
lm_whales 回复wenbo228228: 这个编译器真的找不到的,大小写不同,对于编译器是不同的标识符
接近 4 年之前 回复
lm_whales
lm_whales 回复wenbo228228: int LinkedStack::GetSize()const
接近 4 年之前 回复
lm_whales
lm_whales virtual bool getTop(T& x)const = 0;virtual int getSize()const = 0;
接近 4 年之前 回复
wenbo228228
wenbo228228 具体是哪里亲明示啊……,,,如果真是大小写问题,编译器都能找到滴
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++不允许使用抽象类类型对象,我明明每个函数都实现了的
![图片说明](https://img-ask.csdn.net/upload/201510/03/1443871663_740694.png)rn上代码:rnrn```rn Stack.h:rn```rn#pragma oncernrnrnrn//栈定义rntemplate rnclass Stackrnrnpublic:rn const int maxSize = 50;rn Stack();rn virtual void Push(const T& x) = 0;rn virtual bool Pop(T& x) = 0;rn virtual bool getTop(T& x)const = 0;rn virtual bool IsEmpty()const = 0;rn virtual bool IsFull()const = 0;rn virtual int getSize()const = 0;rnrn;rnrnrn```rn LinkedStack.h:rn```rnrn#pragma oncernrn#include "Stack.h"rn#include "Nodes.h"rn#include rnusing namespace std;rnrntemplate rnclass LinkedStack:public Stack //链式栈rnrnpublic:rn LinkedStack() :top(NULL)rn ~LinkedStack() MakeEmpty(); rn void Push(const T& x);rn bool Pop(T& x);rn bool GetTop(T& x)const;rn bool IsEmpty()const return (top == NULL) ? true : false; rn int GetSize()const;rn void MakeEmpty();rn friend ostream& operator<<(ostream& os, LinkedStack& s);rnprivate:rn LinkNode *top;rn;rnrnrntemplate rnvoid LinkedStack::MakeEmpty()rnrn LinkNode *p;rn while (top)rn rn p = top;rn top = top->link;rn delete p;rn rnrnrntemplate rnvoid LinkedStack::Push(const T& x)rnrn top = new LinkNode(x, top);rn assert(top);rnrnrntemplate rnbool LinkedStack::Pop(T& x)rnrn if (IsEmpty())rn return false;rn LinkNode *p = top;rn x = p->data;rn top = top->link;rn delete p;rnrnrntemplate rnbool LinkedStack::GetTop(T& x)constrnrn if (IsEmpty())rn return false;rn x = top->data;rn return true;rnrnrntemplate rnint LinkedStack::GetSize()constrnrn int count = 0;rn LinkNode *p = top;rn while (p)rn rn p = p->link;rn count++;rn rn return count;rnrnrntemplate rnostream& operator<<(ostream& os, LinkedStack& s)rnrn os << "栈中元素个数:" << s.GetSize() << endl;rn int i = 1;rn LinkNode *p = s.top;rn while (p)rn rn os << i++ << ":" << p->data << endl;rn p = p->link;rn rn return os;rnrnrntemplate rnbool LinkedStack::IsFull()constrnrn return false; //链表栈空间无限制,不会满rnrnrn```rn BinaryTree.h:rn```rn#include rn#include "LinkedStack.h"rnusing namespace std;rnrntemplate rnstruct BinTreeNode //二叉树节点类定义rnrn T data;rn BinaryTreeNode *leftChild,*rightChild;rn BinaryTreeNode() :leftChild(NULL), rightChild(NULL)rn BinaryTreeNode(T x, BinaryTreeNode *l = NULL, BinaryTreeNode *r = NULL) :data(x), leftChild(l), rightChild(r)rn;rnrntemplate rnclass BinaryTree //二叉树类定义rnrnpublic:rn BinaryTree() :root(NULL)rn BinaryTree(T value) : refValue(value), root(NULL)rn BinaryTree(BinaryTree& s);rn ~BinaryTree() destroy(root); rn bool IsEmpty() return (root == NULL) ? true : false; rn BinTreeNode *GetParent(BinTreeNode *current)rn rn return (root == NULL || root == current) ? NULL : GetParent(root, current); rn rn BinTreeNode *GetLeftChild(BinTreeNode *current)rn rn return (current == NULL) ? NULL : current->leftChild;rn rn BinTreeNode *GetRightChild(BinTreeNode *current)rn rn return (current == NULL) ? NULL : current->rightChild;rn rn int GetHeight() return Height(root); //返回树高度rn int GetSize() return Size(root); //返回节点数rn BinTreeNode *GetRoot()const return root; rn void PreOrder(void(*visit)(BinTreeNode *p)) //前序遍历rn rn PreOrder(root, visit);rn rn void InOrder(void(*visit)(BinTreeNode *p)) //中序遍历rn rn InOrder(root, visit);rn rn void PostOrder(void(*visit)(BinTreeNode *p)) //后序遍历rn rn PostOrder(root, visit);rn rn void LevelOrder(void(*visit)(BinTreeNode *p)); //层次序遍历rn int Insert(const T& item);rn BinTreeNode *Find(T& item)const;rnrnprotected:rn BinTreeNode *root; //根指针rn T refValue; //数据输入停止标识rn void CreateBinTree(istream& in, BinTreeNode *& subTree);rn bool Insert(BinTreeNode * & subTree, const T& x);rn void Destroy(BinTreeNode * & subTree);rn bool Find(BinTreeNode * subTree, const T& x)const;rn BinTreeNode * Copy(BinTreeNode * orignode);rn int GetHeight(BinTreeNode * subTree);rn int GetSize(BinTreeNode * subTree);rn BinTreeNode * GetParent(BinTreeNode * subTree, BinTreeNode * current);rn BinTreeNode * Find(BinTreeNode * subTree, const T& x)const;rn void Traverse(BinTreeNode * subTree, ostream& out); //前序遍历输出rn void PreOrder(BinTreeNode& subTree, void(*visit)(BinTreeNode * p)); //前序遍历rn void InOrder(BinTreeNode& subTree, void(*visit)(BinTreeNode * p)); //中序遍历rn void PostOrder(BinTreeNode& subTree, void(*visit)(BinTreeNode * p)); //后序遍历rn friend istream& operator >> (istream& in, BinaryTree& Tree); //重载操作:输入rn friend ostream& operator << (ostream& out, BinaryTree& Tree); //重载操作:输出rn;rnrnrntemplate rnvoid BinaryTree::Destroy(BinaryTree * subTree)rnrn if (subTree != NULL) //递归终止条件rn rn Destroy(subTree->leftChild);rn Destroy(subTree->rightChild);rn delete subTree; //必须先删除左右子女树再删除自己,若先删除自己,则leftChlid,rightChild不存在,无法访问子女树rn rnrnrntemplate rnBinTreeNode * BinaryTree::GetParent(BinTreeNode * subTree, BinTreeNode * current)rnrn //私有函数,从subTree节点开始,搜索节点current的父节点rn if (subTree == NULL)rn return NULL;rn if (subTree->leftChild == current || subTree->rightChild == current)rn rn return subTree;rn rn BinTreeNode * p;rn if (p = GetParent(subTree->leftChild, current) != NULL) //递归在左子树中搜索rn return p; rn elsern return GetParent(subTree->rightChild, current); //递归在右子树中搜索rnrnrntemplate rnvoid BinaryTree::Traverse(BinTreeNode * subTree, ostream& out)rnrn //私有函数,前序输出subTree二叉树的所有数据rn if (subTree != NULL)rn rn out << subTree->data << '';rn Traverse(subTree->leftChild,out);rn Traverse(subTree->rightChild,out);rn rnrnrntemplate rnostream& operator << (ostream& out, BinaryTree& Tree)rnrn //重载操作,输出一颗二叉树Treern out << "二叉树的前序遍历\n";rn Tree.Traverse(Tree.root, out);rn out << endl;rn return out;rnrnrntemplate rnistream& operator >> (istream& in, BinaryTree& Tree)rnrn //重载操作,输入并建立一颗二叉树Treern CreateBinTree(in, Tree.root);rn return in;rnrnrnvoid CreateBinTree(istream& in, BinTreeNode * &BT)rnrn //从输入流in输入二叉树的广义表表示建立对应点的二叉链表rn LinkedStack *> s;rn BT = NULL;rn BinTreeNode *p, *t;rn int k; //用k作为处理左右子树的标记rn char ch;rn in >> ch;rn while (ch != '#') //书上是 ch!=RefValuern rn switch (ch)rn rn case '(':rn s.Push(p);rn k = 1;rn break;rn case ')':rn s.Pop(t);rn break;rn case ',':rn k = 2;rn break;rn default:rn p = new BinTreeNode(ch);rn if (BT == NULL)rn BT = p;rn else if (k==1)rn rn s.GetTop(t);rn t->leftChild = p;rn rn elsern rn s.GetTop(t);rn t->rightChild = p;rn rn rn in >> ch;rn rnrnrn```rn Main.cpp:rn```rn#include rnusing namespace std;rn#include "BinaryTree.h"rnrnvoid main()rnrn BinTreeNode * node=NULL;rn //BinaryTree * p = new BinaryTree('#');rn CreateBinTree(cin, node);rn rn system("pause");rnrnrnrn这代码怎么格式不对啊……rn需要的话我可以发源码rnrn
不允许使用抽象类类型 "Alist" 的对象
[b]class Alist:public Listrnprivate:rn int maxSize;rn int listSize;rn int fence;rn Elem* listArray;rnpublic:rn //初始化 构造函数rn Alist(int size=15)rn rn maxSize=size;rn listSize=fence=0;rn listArray=new Elem[maxSize];rn [/b]rn抽象类是上面定义的,但是在使用时rnAlist list(15);会报错不允许使用抽象类类型 "Alist" 的对象 这是为什么,要怎样使用啊。谢谢了
不允许使用抽象类类型“cv::FastFeatureDetector”的对象 的解决办法
报的问题: cv::FastFeatureDetector fast 检测的阈值为0 为什么会报错? 角点检测的几个方法(SURF,SIFT,ORB)都被转移opencv_contrib中了。所以版本之间有差异。 这是转移前的写法: cv::FastFeatureDetector fast(15); fast.detect(img, keypoints); 这种是转移后的写法: Ptr&lt;...
不允许指针指向不完整的类类型
头文件,头文件,头文件... #include "头文件" 重要的事情说三遍...无语了,搞了半天
每个对象都提供服务
》》当在试图开发或理解一个程序设计时,最好的方法就是将对象想象为“服务提供者”。程序本身将向用户提供服务,它将通过调用其他对象提供的服务来           实现这一目的。 》》将问题分解为对象集合。 》》将对象看作是服务提供者还有一个附带的好处:它有助于提高对象的内聚性。高内聚是软件设计的基本质量要求之一:这意味着一个软件构件(例如一个        对象,当然它也有可能是指一个方法或
对象导论之每个对象都提供服务
开发者角度开发者最好是把对象想象成“服务提供者”,程序本身将向用户提供服务,或者通过调用其他对象来实现这一目的。好处有助于提高软件的内聚性,高内聚是软件设计的基本质量要求之一:这意味着一个软件构件的各个方面“组合”的很好。在良好的程序设计里中,每个对象都可以很好的完成一项任务,但是它并不试图做更多的事情。
寻求抽象对象与抽象对象的交互的解决方案
我在做一个项目, 视图层使用的是抽象对象,而逻辑层是抽象的具体实现,在开发中期,发现很多问题,而最根本的问题是抽象与具体实现之间发生冲突。rn要解决的问题:rn任何事物在不同的人(角色)看来,都有不同的观点(关注点不一样),我们可以用多态的行为来解决,但在开发中引发的问题的我们想即想减少视图与逻辑的紧密度,同时又要保持其自身重定性和可扩展性,也就是逻辑的具体实现或改变不影响视图,但同时又要体现同一事物的多面性和发展性rn举例:(C# 伪代码)rn抽象父类rnpublic abstrct class A { A.New( tag ); } //依据tag值 A.New方法返回不子类实例的抽象对象 ,rn子类rnprivate class A1:A { Name1 get;set; } rnprivate A2:A Name2 get;set; .rn.....后期依据需求会延伸出不同的子类 rnrnpublic abstrct class B (实现形式同上)rnprivate class B1:B ,B2:B ...(子类)rn抽象类与子类及子类之间有细节上的差异 , 另外父类与子类可能不存在于同一个物理位置 ( 就是所在的DLL不是同一个)rnrn类之间的访问规则(父类之间、子类之间、父子类之间,同类型之间与不同类型之间):rn1.在视图层只识别父类型,不知道子类型,rn2.在逻辑层, rn同一个类型下的父子类 之间可以相互访问或类型转换如A -> A1,A2.. ,B1->B,B2,B3...rn但不同类型的父子关系只能通过抽象类进行交互(或说不同类型的子类是不能直接进行交互的),如:rnB<->A , A1-> B,B1>A , 但不能 A1,A2->B1,B2 , B->A1rnrn视图代码:rnA a = A.New("A1");rnB b = B.New( "B2" )rn//需要对a与b内的某个拓展属性进行值的交互 , rn 运行时的代码的样子: a.Name1 = b.Name2 ; 可能后期的子类还会出现其它新的属性和方法(不一定是Name1,Name2...不要固化思维或形而向上来才考虑问题),我是说在运行时的样子,但在编码时只知道A和B的类型,不知道其具体实现子类的扩展部分的元素(属性或方法),这种情况下如何实现抽象对象与抽象对象 (父对象与父对象)之间的交互??换句话说我需要确定具体的子类才可以交互。rnrn原来我是实现个性化接口来实现 (每个子类实现唯一的接口),但这种方案行不通,最终还是间接的对子类型的依赖而且这种方案很笨不灵活,另外这个和反射没有关系,不要以为可以通过反射解决问题,一点关系都没有rnrn最后,也许我在思路上出了问题,或也许进了牛角尖,但不管怎么样,还是请大家给点主意。多提点!rnrnrnrnrnrnrnrn
对象的抽象
请问:rnrn对现实世界的抽象有什么技巧和规则吗?例如:面对一个实际问题应该如何着手去做。rnrn谢谢指点
VS2010提示“不允许指针指向不完整的类类型”
原因:类没有include
“不允许指针指向不完整的类类型”问题分析
refs: http://blog.csdn.net/tonycoo/article/details/42931373 theApp.m_pDlgLog->SendMessage(DEFINE_MESSAGE_UPDATE_LOG); 提示错误, 当引入m_pDlgLog的头文件后,错误消失。 ------------------ 结论:struct的定义不
vs提示 “不允许指针指向不完整的类类型”
看看 include
关于“不允许指针指向不完整的类类型”问题分析
你include了吗哈哈哈哈哈哈
系统要为每个对象的函数都分配内存吗?
1.一个class 含有很多函数,但是实际只用了几个,没用到的函数系统还会为它们分配内存吗?rn2.如果new 多个该class的对象,设为a b c ...,系统要分别为a b c ...中的函数分配内存吗?
是否每个对象都需要判断null
net 开发webform,想请教一下各位:是否页面中每个对象都需要判断是否为null?rn 假设有一个页面,页面上显示的是一个课程的信息,比如课程介绍,开课时间,课程教师,课程图片等等课程对象属性的信息,浏览器的地址栏中一定会有一个课程的id。如果在地址栏中输入一个不存在的课程的id,那么这个时候代码中应该作何处理,我觉得:rn 1.如果对象不为空,则读取信息,若为空,则不读取。这样的话,页面中需动态读取信息的地方都是空白的,只有静态信息。rn 2.若对象不存在,则直接跳转到404页面。rn 3.若对象不存在,则默认读取一个一定存在的对象的信息。rn 4.若对象不存在,则返回到课程列表页之类的页面。rn 但是,我看我们公司的很多代码都不作判断,直接读取对象的信息,然后在配置文件中配置个404,于是,你在浏览器中输入一个不存在的课程的id,直接跳转到404(代码出错了,跳转的,不报黄页而已),这样处理能行吗,我总觉得这样子不行啊,这应该是代码中的错误啊。rn 各位大牛都是怎么处理这种情况的,是不是都应该判断一下对象是不是为空啊,还是有一些别的更好的方法?
关于类类型对象的赋值问题
我定义了一个类A,如下:nclass Ann private:n int i1;n public:n int i2;n A(int i);n A(int i1,int i2);nnn然后,我在main函数中定义了一个A类类型的变量:nint main(void)nn A a(1,2);n //问题来了n a=3;n a=(4,5);n a=(6,7,8);n return 0;nnna的三条赋值语句都可以通过,n程序可以编译和运行通过,这是为什么啊?
1.3:每个对象都提供服务
1:每个对象都是服务的提供者 2:把问题分解为对象 集合; 3:提高对象的内聚性      总结:       这小节提出了  根据对象的服务提供对象的内聚性
为什么每个C程序都需要一个叫做main的函数
当加载器运行时,它创建一个如下图的运行时存储器映像(存在一段较短的时间,在虚拟地址空间上)。在可执行文件中段头部表的指导下,加载器将可执行文件的的相关内容拷贝到代码和数据段,然后加载器跳转到程序的入口点,也就是符号_start的地址。在_start地址处的启动代码(startup code)是在目标文件ctr1.o(参考下面代码)中定义的,对所有C程序都是一样的。它会最终调用应用程序的main函数。
每个函数都捕捉异常吗?
小疑问rnrn为避免未知错误导致软件自动关闭,rn是不是为每个函数都加上异常捕捉?rnrn[code=C#]rn tryrn ............rn rn catch (Exception ex)rn rn MessageBox.Show(ex.Message);rn rn[/code]rnrn如果一个程序函数很多的话,要为每个函数加上异常捕捉?rn如果是这样,那整个程序代码就多了很多了。rn有没有办法共用一个异常捕捉函数?rnrnrnrnrnrn
如何抽象数据对象
我的项目目前做好数据库了,想抽象数据对象·然后就编码了·请问该怎么抽象,要遵循什么原则呢?是不是有工具啊?我有100多个表。
抽象的同步化对象
产生一个类:lock.其构造函数和析构函数负责“进入”和“离开”critical section.Lock的构造函数需要将一个CriticalSection对象指针作为唯一参数。在其内部,Lock持有一个指针,指向被锁定的CriticalSection对象。 临界区类: #include class CriticalSection { public: CriticalS
对象导论之抽象过程
背景平时都是在用Python, Java一直只是知道一些基本语法,现在重新读《Java编程思想》,希望能扎实的掌握Java。第一章主要是介绍OOP (Object-oriented Programming, 面向对象编程) 背景性和补充性的材料。1.1 抽象过程所有编程语言都提供抽象机制,汇编语言是对底层机器的轻微抽象,“命令式”语言(FORTRAN、BASIC、C)是对汇编语言的抽象。但是这些抽象
对象关闭,不允许操作
[code=SQL]rnIF EXISTS( Select Name rn From sysobjectsrn Where Name =N'QueryPriceInList'rn And Type = 'P')rn DROP PROCEDURE QueryPriceInListrnGOrnCREATE PROCEDURE QueryPriceInList @SelectPrice Decimal(18,6), @MaxPrice Decimal(18,6)rnASrnDeclare @PriceRangePercent decimal(18,6)rnSelect @PriceRangePercent = (@SelectPrice - @MaxPrice)/@MaxPricernrn--Create Table a(Price Decimal(18,6))rnInsert Into a Values (@PriceRangePercent)rnSelect Price From arn--Drop Table #arn[/SQL]rn在SQL查询分析器里能得到结果rn我要在VB得到其结果rn[code=VB]rnWith cnrn .ConnectionString = connrn .Openrn .CursorLocation = adUseClientrnstrsqld = "exec QueryPriceInList '" & DleMoney & "','" & 38 & "'"rn Set rs = .Execute(strsqld)rnEnd Withrn'然后rnWith rsrn If .State = 1 Thenrn ..........rnEnd Withrn[/code]rn调试代码时,老是rs.State = 0,请问怎么回事?rn添加监视rs时,也有许多"对象已关闭,操作不允许",是不是跟我写的存储过程有关系?
对象关闭,不允许操作
Const MaxPerPage=20rn dim totalPut rn dim CurrentPagern dim TotalPagesrn dim jrn dim sqlrn if Not isempty(SafeRequest("page",1)) thenrn currentPage=Cint(SafeRequest("page",1))rn elsern currentPage=1rn end if rnset rs=server.CreateObject("adodb.recordset")rnselect case a rn case ""rn rs.open "select id,namefrom Shop order by adddate desc",conn,1,1rn rn case "index"rn rs.open "select id,name,stock from Shop",conn,1,1rnend selectrnif rs.eof And rs.bof thenrn提示 “if rs.eof And rs.bof thenrn”这一行对象关闭时,不允许操作。
Response 对象,不允许操作
rn 发表帖子 rn<% set showbbs=conn.execute("select * from bbs order by id desc") %>rn rn rn 作者rn 主题rn rn <% while not showbbs.eof %>rn rn <% =showbbs("name") %>rn "><% =showbbs("title") %>rn rn showbbs.movenextrn <% wend rn showbbs.closern set showbbs=nothingrn %>rnrn运行上面代码后,出现以下错误:rn技术信息(用于支持人员)rnrn错误类型:rnResponse 对象, ASP 0104 (0x80070057)rn不允许操作rn/test/index.asprnrnrn浏览器类型:rnMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) rnrn网页:rnGET /test/index.asp rnrn时间:rn2006年10月1日, 上午 09:05:23 rnrnrn详细信息:rnMicrosoft 支持 rn请高手们帮帮小弟我。rn小弟在此感激不尽。
抽象和实现
越来越感觉抽象定义的重要性,现在慢慢的习惯先抽象定义类和定义类中的方法,然后再谈实现,这样·会让我感觉思路清晰很多,其实不关事编程语言,生活中也可以这样定义,先谈想法再谈实现
SOCKET问题,我想实现给每个连接都发送信息。
int port = 8000; //定义侦听端口号rn private Thread thThreadRead; //创建线程,用以侦听端口号,接收信息rn private TcpListener tlTcpListen; //侦听端口号rn private bool blistener = true; //设定标示位,判断侦听状态rn private NetworkStream nsStream; //创建接收的基本数据流 rn private StreamReader srRead;rn private TcpClient tcClient ;rnrn private void Listen ( ) rn rn try rn rn tlTcpListen = new TcpListener ( port ) ; //以8000端口号来初始化TcpListener实例rn tlTcpListen.Start ( ) ; //开始监听rn tcClient = tlTcpListen.AcceptTcpClient ( ) ; //通过TCP连接请求rn nsStream = tcClient.GetStream ( ) ; //获取用以发送、接收数据的网络基础数据流rn srRead=new StreamReader(nsStream);//以得到的网络基础数据流来初始化StreamReader实例rn label1.Text = "已经连接!"; rn while( blistener ) //循环侦听rn rn string sMessage = srRead.ReadLine();//从网络基础数据流中读取一行数据 rn if ( sMessage == "STOP" ) //判断是否为断开TCP连接控制码rn rn tlTcpListen.Stop(); //关闭侦听rn nsStream.Close(); //释放资源rn srRead.Close(); rn statusBar1.Text = "连接已经关闭!" ; rn thThreadRead.Abort(); //中止线程rn return; rn rn string sTime = DateTime.Now.ToShortTimeString ( ) ; //获取接收数据时的时间rn listBox1.Items.Add ( sTime + " " + sMessage ) ; rn rn rn catch ( System.Security.SecurityException ) rn rn MessageBox.Show ( "侦听失败!" , "错误" ) ; rnrn rn rnrn private void button1_Click(object sender, System.EventArgs e)rn rn thThreadRead = new Thread ( new ThreadStart ( Listen ) );rnrn thThreadRead.Start();//启动线程 rnrn button1.Enabled=false; rnrn rnSOCKET问题,我想实现给每个连上的连接都发送信息。各位大哥,怎么做啊,或者能否给我个列子啊,非常感谢。
我不想每个stmt都设置超时
各位大侠,我不想每个stmt要setQueryTimeout,rn有没有一个connection设定一个setQueryTimeout?
不允许使用无法序列化的对象或 MarshalByRef 对象。
会话状态模式为“StateServer”或“SQLServer”时,不允许使用无法序列化的对象或 MarshalByRef 对象。rn网上说是在类实例化时加上[Serializable]rn难道每个类都要加吗?rn怎么解决rn在线等哦
C++明明引用了类的头文件,但是不识别类类型
[code=c]rn//CameraClient.hrn#ifndef _CAMERA_CLIENT_H__rn#define _CAMERA_CLIENT_H__rnrn#include rn#include rn#include rn#include rn#include rnusing namespace std;rnrnrnnamespace CAMERA_VITRUAL rnrn typedef void(*user_callback_fun)(int addr, void* entity_in);rnrn //Camera实体类rn class CameraClient rn rn public:rn void set_user_callback_fun(user_callback_fun fun);rn public:rn CameraClient();rnrn ~CameraClient() throw ();rnrn void close();rn int init(const string& brokerURI, string& clientID);rnrn private:rn void cleanup();rnrn private:rn user_callback_fun m_userCallbackFun;rn int m_x;rn int m_y;rn ;rnrnrnrn#endif[/code]rnrn[code=c]rn//CameraInterface.hrn#ifndef _CAMERAINTERFACE_H__rn#define _CAMERAINTERFACE_H__rnrnrn#ifdef CAMCLIENT_EXPORTSrn# define DLL_IMPORT_CAM __declspec (dllexport)rn#else rn# define DLL_IMPORT_CAM __declspec (dllimport) rn#endif rnrnrn#include "test_cfg.h"rnrnnamespace CAMERA_VITRUAL rnrn typedef void(*user_callback_fun)(int addr, void* entity_in);rnrn class CamereClient;rn //CamClient接口类rn class DLL_IMPORT_CAM CameraInterfacern rn public:rn rn ~CameraInterface();rn static CameraInterface* get_instance();rnrn public:rnrn void set_user_callback_fun(user_callback_fun fun);rn void close();rn int init(const string& brokerURI, string& clientID);rnrn protected:rn CameraInterface();rn rn private:rn static CameraInterface* m_instace;rn CamereClient* m_CamClient;rn ;rnrnrn#ifdef __cplusplus rnextern "C"rnrn#endifrn DLL_IMPORT_CAM void pub_entity_fun(int addr, void* entity_in); //发布rn DLL_IMPORT_CAM void sub_entity_fun(int addr, void* entity_in); //订阅rn#ifdef __cplusplus rnrn#endifrnrn#endifrn[/code]rnrn[code=c]rn//CameraClient.cpprnrn#include "CameraClient.h"rnrnusing namespace CAMERA_VITRUAL;rnrnvoid CameraClient::set_user_callback_fun(user_callback_fun userCallbackFun)rnrn m_userCallbackFun = userCallbackFun;rnrnrnCameraClient::CameraClient()rnrn m_x = 0;rn m_y = 1;rnrnrnCameraClient::~CameraClient() throw ()rnrn cleanup();rnrnrnvoid CameraClient::close()rnrn cleanup();rnrnrnint CameraClient::init(const string& brokerURI, string& clientID)rnrn return 0;rnrnrnvoid CameraClient::cleanup()rnrnrnrn[/code]rn[code=c]rn//CameraInterface.cpprnrn#include "CameraClient.h"rn#include "CameraInterface.h"rnrnusing namespace CAMERA_VITRUAL;rnCameraInterface* CameraInterface::m_instace = new CameraInterface();rnrnCameraInterface* CameraInterface::get_instance()rnrn return m_instace;rnrnrnCameraInterface::CameraInterface()rnrn m_CamClient = new CamereClient();rnrnrnCameraInterface::~CameraInterface()rnrn if (m_CamClient != NULL)rn rn delete m_CamClient;rn m_CamClient = NULL;rn rnrnrnint CameraInterface::init(const string& brokerURI, string& clientID)rnrn return m_CamClient->init(brokerURI, clientID);rnrnrnvoid CameraInterface::close()rnrn return m_CamClient->close();rnrnrnvoid CameraInterface::set_user_callback_fun(user_callback_fun userCallbackFun)rnrn return m_CamClient->set_user_callback_fun(userCallbackFun);rnrnrnrnvoid pub_entity_fun(int addr, void* entity_in)rnrnrnrnvoid sub_entity_fun(int addr, void* entity_in)rnrnrnrn[/code]
SQL MAX函数 不允许使用聚合函数和子查询
SQL MAX函数不允许使用聚合函数和子查询 rn这是什么意思,有没有具体的例子可以说明的
重构抽象-变量和函数
前言 最近,在阅读《重构 改善既有代码的设计》,总结的关于函数和变量的重构思想。 重构变量和函数
Python抽象之函数
函数 用def语句创建函数。 >>> def hello(name): return 'Hello,' + name + '!' >>> print hello('world') Hello,world! >>> 文档化函数 在函数的开头写下字符串,它还作为函数的一部分进行存储,这称为文档字符串。 >>> def square(x): 'Calculates the squa
sicp:函数抽象与数据抽象
(一)函数抽象 让我们从简单的三个例子开始, 实现一个计算从1到n个自然数的和的函数,接受参数n,返回total,你可以不假思索地写下以下代码 function addNatural(n) { var k = 1, total = 0; while (k &amp;amp;lt;= n) { total += k; k++; } r...
python基础知识---抽象--函数
\quad\quad创建函数的一般形式def function_name(parameters): function_body函数参数注意事项\textbf{函数参数注意事项} 参数值传递:引用?传值? 收集参数 map,filter,reduce  1. 参数值传递:引用?传值?\textbf{ 1. 参数值传递:引用?传值?} 针对第一条,我们可以参考如下文章 参数值传递:引用
042函数的抽象
智能合约是以太坊被称为区块链2.0的关键技术。随着人们对区块链核心技术的应用开始由虚拟货币转向基础设施,自由开发分布式应用(DAPP)已经受到越来越广泛的关注。rn本套教程基于以太坊智能合约开发语言solidity,结合前端,nodejs等实现热门技术让你能够快速学会智能合约,可以自行在以太坊公链上开发DAPP;
这段代码都提示 “对象关闭时,不允许操作。“ 决了
<%rnUadmin_id=session("Sadmin_id")rnUadmin_user=request("admin_user")rnUadmin_pwd=request("admin_pwd")rnrnset rs=server.createobject("ADODB.Recordset")rnsql="update admin set admin_user='"&Uadmin_user&"',admin_pwd='"&Uadmin_pwd&"' "rnrnrs.open sql,conn,1,3rnrnif rs.eof thenrnresponse.write " "rnend ifrn%>rn
python抽象-函数
python抽象-函数
05-抽象(函数)
本文将详细介绍参数(parameter)和作用域(scope)的概念,以及递归的概念及其在程序中的用途。 抽象(函数) 创建函数 def fib(num): fibs = [0,1] for i in range(num): fibs.append(fibs[-2]+fibs[-1]) if i==num-1:
Android-KatzKotlin的函数数据类型和抽象
Katz:Kotlin的函数数据类型和抽象
一、Hook(抽象)函数
看完高焕堂老师的视频,自己总结下知识。 所谓的Hook,就是用来接合两个东西的接口。如果两个东西于不同时间出现,则一方会预留空间,给予另一方于未来时刻能以实体来填补该空间,两者虚实相依,就密合起来了。 Hook函数是Android框架与应用类别的接合处。Android以来类的继承的可Overridable函数来作为主要的Hook函数。 C++例子: //Ex02-01.cpp #inclu
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件